Ответы пользователя по тегу PHP
  • Почему через curl php не проходит запрос с прокси?

    iMedved2009
    @iMedved2009
    Не люблю людей
    Уппс

    CURLOPT_USERPWD заменить на CURLOPT_PROXYUSERPWD
    Ответ написан
    1 комментарий
  • Как импортировать данные из больших файлов xml? Памяти нехватает на них?

    iMedved2009
    @iMedved2009
    Не люблю людей
    XMLReader ровно и предназначен для работы с большими XML. Проблема не в нем, а в попытке загрузить все нужные ноды в память - и здесь вас другой язык не сильно спасет - без вопросов какой нибудь язык сможет загрузить в память больше элементов, чем PHP, но все равно рано или поздно уткнется в память при n-количестве элементов. По этому берете XMLReader открываете файл идете по дереву - встретили нужный элемент, обработали и пошли дальше.
    Ответ написан
    Комментировать
  • Как решить проблему с array fiil keys?

    iMedved2009
    @iMedved2009
    Не люблю людей
    $sku['stock'] = array_fill_keys($stock_complement&&is_array($stock_complement)?$stock_complement:[], 0);
    Ответ написан
  • Как сделать производственный календарь php?

    iMedved2009
    @iMedved2009
    Не люблю людей
    Объявлять массив сразу с двумя рабочими днями, вставлять сразу парами, счётчик инкрементить парой, что ставить рабочий или выходной определять по предыдущему элементу?
    Ответ написан
    Комментировать
  • Как сделать выборку из нескольких таблиц с помощью оператора LIKE?

    iMedved2009
    @iMedved2009
    Не люблю людей
    Left join - у нас все таки OR.
    SELECT materials.id,
           materials.title,
           materials.author,
           materials.description,
           types.name      AS type,
           categories.name AS category
    FROM materials
             LEFT JOIN categories
                       ON materials.id_category = categories.id
             LEFT JOIN types
                       ON materials.id_type = types.id
             LEFT JOIN tags_to_materials
                       ON materials.id = tags_to_materials.material_id
             LEFT JOIN tags
                       ON tags.id = tags_to_materials.tag_id
    WHERE materials.author LIKE '$str%'
       OR materials.title LIKE '$str%'
       OR categories.name LIKE '$str%'
       OR tags.name LIKE '$str%'


    Однако некоторые записи будут возвращаться дважды 0 ибо tags - materials многие ко многим. Если это не устраивает то задача называется groupwise maximum и одно из решений:

    select materials.id,
           materials.title,
           materials.author,
           materials.description,
           types.name      AS type,
           categories.name AS category
    FROM materials
             LEFT JOIN categories
                       ON materials.id_category = categories.id
             LEFT JOIN types
                       ON materials.id_type = types.id
             LEFT JOIN tags_to_materials
                       ON materials.id = tags_to_materials.material_id
             LEFT JOIN tags
                       ON tags.id = tags_to_materials.tag_id
    where materials.id in (
        SELECT materials.id
        FROM materials
                 LEFT JOIN categories
                           ON materials.id_category = categories.id
                 LEFT JOIN types
                           ON materials.id_type = types.id
                 LEFT JOIN tags_to_materials
                           ON materials.id = tags_to_materials.material_id
                 LEFT JOIN tags
                           ON tags.id = tags_to_materials.tag_id
        WHERE materials.author LIKE '$str%'
           OR materials.title LIKE '$str%'
           OR categories.name LIKE '$str%'
           OR tags.name LIKE '$str%' group by materials.id);
    Ответ написан
    Комментировать
  • Как исправить ошибку Call to a member function fetchAll() on array в php?

    iMedved2009
    @iMedved2009
    Не люблю людей
    1. В случае фильтрации вы возвращаете массив - и у массива нет метода fetchAll. Как собственно и других методов.
    2. В случае если вы убираете квадратные скобки то тогда у вас возвращается только данные с первым статусом.

    Если я правильно понял то вам надо посмотреть есть ли метод whereIn у вашего $this->db->table и использовать его.
    Ответ написан
  • Как правильно сделать сохранение "глобальной переменной"?

    iMedved2009
    @iMedved2009
    Не люблю людей
    Singleton - тоже плохая практика

    class Single
    {
        public array $data = [];
        public static $instance;
    
        PRIVATE function __construct()
        {
        }
    
        public static function getInstance()
        {
            if (empty(self::$instance)) {
                self::$instance = new Single();
            }
            return self::$instance;
        }
    
        public function __get(string $key)
        {
            return $this->data[$key]??null;
        }
    
        public function __set(string $key, $value)
        {
            $this->data[$key] = $value;
        }
    }
    
    class A
    {
        public static function tryW()
        {
            Single::getInstance()->some = 1;
        }
    }
    
    class B
    {
        public static function tryR()
        {
            var_dump(Single::getInstance()->some);
        }
    }
    
    $a = new A();
    $a->tryW();
    
    $b = new B();
    $b->tryR();
    Ответ написан
    2 комментария
  • Правильная подгрузка контента HTML, JS, PHP, MYSQL с учетом добавления и удаления строк. Как реализовать?

    iMedved2009
    @iMedved2009
    Не люблю людей
    Возможность то конечно есть. Вы должны где то хранить что вы показали пользователю и исходя из этого делать запрос или вывод. Вопрос только в том - зачем? Вы на это потратите кучу ресурсов, а по факту выгоды из этого ноль.
    Ответ написан
    Комментировать
  • Как сделать расписание постов из дат по времени и выборку среди них?

    iMedved2009
    @iMedved2009
    Не люблю людей
    select ifnull(
        (select 
    	 	date_format(postdate, '%Y-%m-%d') as date
                   from autoposting_planned
                   where postdate > now()
                   group by date_format(postdate, '%Y-%m-%d')
                   having count(distinct find_in_set(date_format(postdate, '%H:%i'), '02:00,05:00,07:00,08:00')) < 4
                   order by date limit 1), 
        (select max(DATE_ADD(postdate, INTERVAL 1 DAY)) from autoposting_planned)
    );

    По идее вернет первую дату в которой есть окно. Может возникнуть ситуация когда нихера не вернет - если все даты меньше текущего. Можно конечно потрахаться и возвращать свободный слот по времени - но DB не совсем предназначены для такого.

    З.Ы. А почему вы решили хранить варианты часа в строке?
    Ответ написан
    Комментировать
  • Как изменить get запрос через htaccess?

    iMedved2009
    @iMedved2009
    Не люблю людей
    Вам нужно реврайтить все на index.php а там разгребать урлы и отдавать нужный контент.

    Самый простой способ - все файлы которые не существуют отправляем в index.php.

    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /index.php?path=$1 [NC,L,QSA]
    Ответ написан
    Комментировать
  • Почему не могу создать symfony проект?

    iMedved2009
    @iMedved2009
    Не люблю людей
    nano ~/.symfony5/php_versions.json
    Ответ написан
    Комментировать
  • Как сделать запрет?

    iMedved2009
    @iMedved2009
    Не люблю людей
    $stmt = pdo()->prepare("SELECT `name` FROM `get_package_name` where name = ?");
    $stmt->execute([$_GET['name']]);
    $get = $stmt->fetch(PDO::FETCH_ASSOC);

    В гет будет лежать пустой массив если нет такой записи.

    З.Ы. Зачем эти вложенности?
    if(!isset($_GET['get_package'])){
          die(json_encode($requestfailed_arr));
    }
    Ответ написан
    Комментировать
  • Как найти в строке слово и обрезать ее?

    iMedved2009
    @iMedved2009
    Не люблю людей
    $text = 'Это очень длинний текст, в нем нужно найти определенное слово и обрезать строку по нему. Так же добавить три точки до и после';
    echo preg_replace('/.{20}\S*(.*)\s.{20}.*/u', '...$1...', $text);
    Ответ написан
  • Как заставить базу обрезать данные которые не помещаются?

    iMedved2009
    @iMedved2009
    Не люблю людей
    Ну вообще это стоит делать на уровне приложения. Ибо только вы знаете можно ли забить на данные или нет.
    DB::table('MYTABLE')->insert([
                        'id' => $id,
                        'description' => mb_substr($description, 0, 255)
                    ]);

    Но нет препятствий патриотам - можно поиграться с SQL MODE если у вас MySQL и убрать все эти <сарказм>"ненужные ошибки"<сарказм> к чертям

    For STRICT_TRANS_TABLES, MySQL converts an invalid value to the closest valid value for the column and inserts the adjusted value. If a value is missing, MySQL inserts the implicit default value for the column data type. In either case, MySQL generates a warning rather than an error and continues processing the statement. Implicit defaults are described in Section 11.6, “Data Type Default Values”.


    P.S. Чего-то анекдот вспомнился

    Среди работников милиции провели тест на сообразительность. Суть теста: в металлической пластине вырезаны отверстия различной формы (квадрат, круг, треугольник и т. д. ), в них нужно вставить соответствующие металлические тела. По результатам теста работники милиции разделились на две группы:
    1. Тупые.
    2. Очень сильные.
    Ответ написан
    Комментировать
  • Почему не работает авторизация PHP curl?

    iMedved2009
    @iMedved2009
    Не люблю людей
    Ну форма авторизации работает через урл
    curl 'https://www.proficosmetics.ru/bitrix/services/main/ajax.php?mode=ajax&c=krasivoereshenie%3Auser.auth&action=login' -X POST -H 'Accept: */*'-H 'Accept-Encoding: gzip, deflate, br' -H 'Referer: https://www.proficosmetics.ru/auth/' -H 'Bx-ajax: true' -H 'Content-Type: application/x-www-form-urlencoded' --data-raw 'login=123&password=123&remember=Y&SITE_ID=s1'

    А вы куда то не туда авторизуетесь. Да и ответ то какой?
    Ответ написан
    Комментировать
  • Как называется такой вызов функции?

    iMedved2009
    @iMedved2009
    Не люблю людей
    Method Chaining

    Каждый метод должен возвращать обьект.
    Ответ написан
    Комментировать
  • Как передать переменную в подключаемый класс?

    iMedved2009
    @iMedved2009
    Не люблю людей
    Не совсем понятно. Но вы либо в конструктор Control передаете уже созданную модель, аля:
    class Control
    {
        public function __construct(private ModelOne $baz){}
        public function test()
        {
            $this->baz->bar();
        }
    }
    
    (new Control(new ModelOne('some text')))->test();


    Либо сам класс определяет внутри себя:

    class Control
    {
        private ModelOne $baz;
        public function __construct(){
              $this->baz = new  ModelOne('some text');
        }
        public function test()
        {
            $this->baz->bar();
        }
    }
    
    (new Control())->test();
    Ответ написан
    Комментировать
  • Как быстро узнать имя файла по ссылке, если оно не указано явно?

    iMedved2009
    @iMedved2009
    Не люблю людей
    print_r(get_headers('https://du.sf-converter.com/go?payload=1*eJzVlF2PmzgUhv9KNFKtXWlJwRgDlayKMPmemXzMJCS5iRhwwAkGwkcIqfa%2FryHdbXvZ1V5sbx6M4fj4nNd%2BvzzkSZl5dJVFD58ewqJI808fP1ZV1a2TsijfaddL%2BMfKLbzw84X4iwpVphNsvMXDH18jx%2F5PB7qlz5IfM2YZlCQpjyWXBRGOb7QbJEkQ0QvzadIu1Y7SyK3fXe%2F0mV5TllGiYA0bClYxApSR41S3tuf5eopeuVK988suC%2BwKsJQgrauoalfRYRdCAzCfJJJl9TPVWbhzqRfM5%2Fsp9SU%2BmkwdCL09TCd%2BUA88OB%2Bh6XkkIgo3IAqSwb1o8rVIkNFzKTaS5xGpaQ54SHQPcE5U5QO0IQY8Jt8VJebEmxbG9BTrJ8Bz4pZiLokzwC%2BECzACQRoRqAMWs8KrYv89zYkhY6iJ3KlHUOKtbfwkF%2FO5g1isTPkstW9vp5HpBtrSAJc0uxAFcMYpafv8AQ54ikCcE39jhZVxDG%2FlYQa9ns1f%2BqfnfjAEAcva3XsRjYmKVFVTEPDLjEAFdmVTAREvmlYrGJsG1MVmsKqD%2BxzWTYSwCQ4X0WYITpSmbsQutF3wIGQiEMmyoupq0xAx1CHCwCNOvweKa6OMCpEq9kfY0hlLNh3Li%2BdeVYli3cwVHborLYIpE2BpA7%2BBUKTpZ6uHGHxToplNPcGmF%2BLR9EI84lxAlCrYFCoeokRBURyI%2Fs7GwyaAN2j%2B4E0Mbxe5NOnTZvHvlBGBLCDWULX3V6taWuNgJAd6rcGbIRfFJCtlV55qJ%2FU4OS2SMw9GA%2Fy6w72rfXg0F%2FbYmqDByio0JXjZTa3l9XU9y7x1uJWcrYaP5bjPHAvT9OiUJWgTzc7yYmK0iez14LDf7%2Bnyulpaxxc39jbLTbXTb6EVGsb5RVlyZ%2FRcv25kkcgeVtvz07aod8NXvYBpKm9qN0znSviUPo6llfdWWJKcOCdrKu5ne9V%2BxfupYuA2o1wMm%2FOmqKil1hK31BtiuT2NsOX9ZKKWzVeoG4KqiVpqLXFLveX9q%2FlLWUGrzs9agaKr2ESa8c0LhAH%2B4wW6ikxN6Ksi5b%2FzAu1fecFd9P%2BhG%2BzyRfh6CCt9pm%2Fy3WS5rLitKJPngbJYzZK3%2FXQwKofKWDfyRFzSjUZxro6yWe%2FIPL2%2BHLHvlfKTVFIeaiobDa%2BjySxb25vgRzcIxqH1Umeu8d5no8F8Ww5LD5W9qeU6ob7z%2Fe3RRbf5cPi0P7w9zzcW61vm9Liy1qZzrSOG6LhO9aG10Gahb08s4fBPt%2F3WveGV%2FbiwPqiPwhMKVkRUGMKSeaeOlYuXuiN1XuiFZp1hEsduZyiU7myTsrNKO7%2FNDgfmMTfqPJc58zrr5vj9Lpa5K5hbxcOnb97w519V2bVo*1656797692*b2dac99c14395ecd', true));

    Разобрать заголовок
    content-disposition: attachment; filename="Rick Astley - Never Gonna Give You Up (Official Music Video).mp4
    Ответ написан
    23 комментария
  • Ошибка в sql записи. Как исправить?

    iMedved2009
    @iMedved2009
    Не люблю людей
    LIKE '%$SearchTitle%' ORDER BY `number_of_eavesdroppers` DESC LIMIT $SearchFrom, 20");

    Скобочки лишние

    З.Ы. А вы понимаете что первый скрипткиддис снесет вам все?
    Ответ написан
    8 комментариев
  • Как достать из массива определённый диапазон?

    iMedved2009
    @iMedved2009
    Не люблю людей
    Ответ написан
    Комментировать