Ответы пользователя по тегу PHP
  • Как получить заголовок страницы с Озона?

    Akdmeh
    @Akdmeh
    PHP, Yii2, Music
    Срабатывает защита от парсинга и ботов (грубо говоря, вам показывается CAPTCHA типа: "вы не робот?").
    Подобные защиты обычно обойти очень трудно.
    Попытайтесь с помощью
    curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36');

    притвориться обычным браузером.
    Попытайтесь через прокси (тоже маловероятно).
    Поищите сайты, которые уже его распарсили и которые не имеют такой злой защиты.
    А, еще есть вариант через виртуальный браузер headless-браузеры, они могут гипотетически исполнить JS-код и пройти проверку (но не факт), что-то типа https://github.com/chrome-php/chrome
    Но честно скажу - обычно подобную защиту пройти очень сложно, если вообще возможно. Но вы попытайтесь сделать то, что я описал.
    Ответ написан
    Комментировать
  • Есть файл который весит ~6 гб, как его прочитать?

    Akdmeh
    @Akdmeh
    PHP, Yii2, Music
    Используя:
    $fh = fopen('file.log', 'r');
    
    while(!feof($fh)) {
    $string = fgets($fh); //получаем одну строчку с файла
    }

    Так вы будете читать файл построчно, оперативную память это почти будет не занимать, если вы, конечно же, не будете весь файл хранить в памяти, а только работать с ним построчно.
    Ну и не лишним напомнить о возможной необходимости блокировки файла на всякий случай и т.д.
    Ответ написан
    2 комментария
  • Не работает UPDATE?

    Akdmeh
    @Akdmeh
    PHP, Yii2, Music
    Простейший совет. Делаете
    echo $az;
    Смотрите, корректный ли запрос и/или запускаете его в phpMyAdmin, чтобы посмотреть, выполняется ли он вообще.
    Ответ написан
    Комментировать
  • Как генерируются случайные символы в php?

    Akdmeh
    @Akdmeh
    PHP, Yii2, Music
    С версии PHP 7 рекомендуется использовать random_int.
    Метод генерации отличается в разных операционных системах, в случае с Linux будет использоваться метод getrandom, о котором подробнее можно почитать здесь
    Ответ написан
  • Почему cURL шлет ответ 200?

    Akdmeh
    @Akdmeh
    PHP, Yii2, Music
    Я не стал глубоко разбираться в вашем вопросе (извините), но есть такая опция как CURLOPT_FOLLOWLOCATION
    Если CURL получает 302 код - он может автоматически возвратить результат Location. Установите CURLOPT_FOLLOWLOCATION в false и проверьте, не изменилось ли чего
    Ответ написан
    Комментировать
  • Как исправить ошибку?

    Akdmeh
    @Akdmeh
    PHP, Yii2, Music
    Не ox7FFFFFFF, а 0x7FFFFFFF (то есть, первым стоит ноль)
    Ответ написан
  • Как изменить массив?

    Akdmeh
    @Akdmeh
    PHP, Yii2, Music
    <?php
    $x = [
        'А' => '1',
        'B' => '2',
        'C' => '3',
        'D' => '4'
    ];
    $y['A'] = array_shift($x);
    $y['B'] = implode('#', $x);
    ?>


    Для более конкретного ответа конкретизируйте, что вы там конкретно изменяете.
    Ну и мой метод изменяет массив x, если нужен неизменный - код желательно немного переделать
    Ответ написан
    2 комментария
  • Как с нуля построить MVC движок?

    Akdmeh
    @Akdmeh
    PHP, Yii2, Music
    Проще всего - используя готовое. Возьмите Lavarel или Yii2.
    Если по-проще хотите - Slim. И разберитесь в том, как они работают. А того, гляди, и вообще не захочется делать свой фреймворк (что в нем вы можете предложить такого, чего нет в готовых решениях?)
    Ответ написан
    4 комментария
  • Стиль кода или где предел его сокращения?

    Akdmeh
    @Akdmeh
    PHP, Yii2, Music
    Вы полностью правы. Это - сумашествие.
    Это нечитаемо, умышленно запутанно. Писать код нужно в первую очередь для других людей, которые будут код сопровождать. А компьютеру одним пробелом больше/меньше - без разницы.
    Для того, чтобы в конец не сойти с ума - предлагаю вам изучить автоформатирование код в некоторых IDE. Сделал клик - и файл отформатировался под нужные вам стандарты.
    Очень помогает от таких лабиринтов.
    Хотя конкретно эти коды не спасет особо, тут вопрос чисто в запутанной логике коде.
    Ответ написан
    Комментировать
  • Роутинг MVC на php?

    Akdmeh
    @Akdmeh
    PHP, Yii2, Music
    Используйте готовые решения, посмотрите Slim, или разберитесь с Symfony. Сэкономьте свое время, не городите лишние велосипеды.
    А вообще - просто делайте проверку на существование метода:
    php.net/manual/ru/function.method-exists.php
    То есть, если метода в искомом классе не существует - перебрасывайте на специальный метод.
    Ну и такую же проверку делайте для самого класса.

    То есть, добавить как минимум

    if (class_exists($controllerName)) {
        $controllerObject = new $controllerName;
        if (method_exists($controllerObject, $actionName)) {
             $result = call_user_func_array(array($controllerObject, $actionName), $parameters);
        } else {
           //load 404 method
        }
    } else {
    //load 404
    }
    Ответ написан
    1 комментарий
  • Как добавить в блок просмотренные товары?

    Akdmeh
    @Akdmeh
    PHP, Yii2, Music
    Я бы лучше записывал в cookie уникальный идентификатор пользователя, сгенерированный случайно.
    И затем уже записывал в БД по этому идентификатору все данные, которые просмотрел пользователь.
    По сути, вы сможете логгировать его действия, также если пользователь решит зарегистрироваться, подставите сразу этому пользователю все просмотренные товары.
    Почему так, а не иначе?
    1) вы сами сможете видеть статистику просматриваемого
    2) cookies имеет ограничение на объем, поэтому все может не поместиться
    3) в принципе, можно использовать localStorage, но тут уже вам нужно двигаться в сторону JS
    Ответ написан
    Комментировать
  • Массивы -константы миф в php?

    Akdmeh
    @Akdmeh
    PHP, Yii2, Music
    Извините, сам ошибся, исправил ответ.
    Да, это работает с версии 7.0, у вас просто опечатка в коде.
    Ответ написан
    Комментировать
  • Псевдо-персистентное соединение в PHP, возможно ли?

    Akdmeh
    @Akdmeh
    PHP, Yii2, Music
    Теоретически вам могло бы помочь reactphp.org
    На практике тяжело сказать, что это будет решением вашей проблемы на 100%.
    Я бы скорее смотрел в сторону либо другого языка программирования (Node.JS, Go, Python, Java...) либо экстенсивным методом (добавлять дополнительные сервера и балансировать нагрузку)
    Ответ написан
    1 комментарий
  • Как обезопасить скрипт?

    Akdmeh
    @Akdmeh
    PHP, Yii2, Music
    ionCube и Zend Encoder чуть ли не единственный вариант. Часть кода с другого сервера - рано или поздно эта защита обходится даже для огромных проектов. Один с ярких примеров для меня - это взлом системы игры Assassin's Creed 2, где для обхода подобной системы подняли локальный сервер на Python и подменили IP серверов с помощью hosts-файла.
    А самый продвинутый вариант на сегодня - это предоставлять услугу без предоставления собственно исходного кода, то есть, SaaS-решения. Вплоть до того, что вы предоставляете скрипт-клиент бесплатно, но он работает по API, который будет отдавать нужную информацию, и без этого центрального сервера нет смысла в клиенте-обертке. Да, это техническое решение, к тому же требует своего сервера (а то и не одного), так что все зависит от конкретных условий проектов, которые вы хотите лицензировать
    Ответ написан
    3 комментария
  • Почему не стоит мешать html c php?

    Akdmeh
    @Akdmeh
    PHP, Yii2, Music
    По сути, я видел 90-килобайтные файлы мешанины PHP, HTML, MySQL-запросов и прочего.
    Писать такой код просто.
    Проблемы начнутся через полгода, когда вы этот код забудете и нужно будет что-то изменить. Вам придется проверять весь код и пересматривать его, чтобы не зацепить изменением в одном месте кода другое, совсем неожиданное.
    После того, как новички несколько раз сталкиваются с такой проблемой, они начинают писать код более структурировано. Один с методов - это отделить получение информации от пользователя и базы данных с помощью одного кода, отображать эту информацию конечному пользователю с помощью другого, и решать, какую информацию показать и связать два предыдущих компонента между собой - с помощью третьего набора кода.
    Грубо говоря, так и получается структура MVC, в которой html и php код разделен.
    Это если условно, так как сколько людей - столько и пониманий MVC.
    Ответ написан
    Комментировать
  • Что посоветуете еще подучить что бы тянуть на Junior PHP разработчика?

    Akdmeh
    @Akdmeh
    PHP, Yii2, Music
    Ко всему выше сказанному хочу дополнить только одно: нужно уметь самому искать нужную информацию. Поверьте, и на этом сайте, и в интернете масса ответов и статей на тему, что нужно знать джуниору PHP. Перед тем, как самому писать, нужно не поленится и погуглить, поискать решение самому. Это будет ваш наиболее ценный навык - умение решать поставленную проблему/задачу самостоятельно.
    По дополнительному: вы не обязаны знать тонкости, но не помешает знать Apache и nGinx, хотя бы принцип работы и почему так, а не иначе - это важно для избежания багов. Не помешает знать, что такое PHP-FCGI, хотя не обязательно; обязательно - Composer; ну и почитайте книгу Мэтта Зандстры. Ну и Symfony, как уже выше советовали - тоже не помешает.
    Ответ написан
    2 комментария
  • Что выведет следующий код php?

    Akdmeh
    @Akdmeh
    PHP, Yii2, Music
    Сперва срабатывает функция print, которая выводит 2.
    Эта функция возвращает значение 1, если вывод был успешным. Вот именно значение 1 подставляется на ее место.
    И затем уже происходит echo строки 1.'1'.3.
    В итоге получаем 2113 - все логично и согласно документации, пусть это и довольно тонкий момент
    Ответ написан
    4 комментария
  • Nginx + fastCGI -как установить на два хоста?

    Akdmeh
    @Akdmeh
    PHP, Yii2, Music
    Хватит только PHP. Все, что вам нужно сделать - это на втором запустить PHP-FPM, а на первом указать в fastcgi_pass 127.0.0.1:9000; - не локальный IP, а IP второго сервера.
    Только при этом нужно еще на втором сервере сделать возможным доступ только с IP первого сервера.
    Если это вам для учебных целей - изучайте дальше. Если для рабочего хоста - лучше заказать услуги системного администратора, помимо прочего существуют многие особенности для безопасной настройки, которые трудно предвидеть.
    Ответ написан
  • Как сделать загрузку новой страницы без старых блоков?

    Akdmeh
    @Akdmeh
    PHP, Yii2, Music
    Еще есть вариант с плагином Pjax, хотя он имеет недостатки и привязку к JQuery.
    https://github.com/defunkt/jquery-pjax
    Ответ написан
    Комментировать