Ответы пользователя по тегу PHP
  • Как добавить свои данные в $SERVER?

    piromanlynx
    @piromanlynx
    Системный администратор в Perfect Solutions
    1. Если используете nginx+php-fpm, то fastcgi_param AAA "bbb";. Это выглядит как: $_SERVER["AAA"] = "bbb";
    2. Если используете nginx+apache, то SetEnv VARNAME myvariable. Это выглядит как: $_SERVER['VARNAME'] = 'myvariable'.
    3. Если хотите универсально, то есть 2 пути:
    3.1. nginx-ом добавлять магический http-заголовок добавляемый при передаче от nginx к php (x-any-magic-header). Выглядит это так: $_SERVER['X_HTTP_ANY_MAGIC_HEADER']. Но обязательно нужно вычищать такой заголовок из запроса юзера. Да и это костыль.
    3.2. в php есть auto_prepend_file (php.ini, .htaccess, poo.d/www.conf - везде можно нашаманить) и там прям php-кодом насовать что нужно: $_SERVER['CCC'] = 'ddd';

    Зависит от того что хотите и степени куда готовы зайти :-)
    Ответ написан
    Комментировать
  • Ошибка 500 при долгом ожидании, как исправить?

    piromanlynx
    @piromanlynx
    Системный администратор в Perfect Solutions
    Найти где ограничение по времени можно так:
    1. выводите php_info() в web, либо php5-fpm -i в консоль.
    2. Находите все ограничения на 90 секунд в опциях - там очень много ограничений может быть (например session life_time, внезапно но может к такому привести если он маленький)
    3. Пробуете менять по одному и методом проб и ошибок находите в чем дело.

    Скорее всего дело не в 90 секунд в php. Вам нужно посмотреть лог ошибок nginx/apache/php и увидеть явную ошибку которая произошла. Это может быть что угодно, но судя по тому что "500 - internal server error" я чую, что у апача какие то лимиты/ошибки.
    Ответ написан
    Комментировать
  • Как правильно написать http запрос на cURL php?

    piromanlynx
    @piromanlynx
    Системный администратор в Perfect Solutions
    Потому что в Вашем запросе указаны некоторые заголовки ответа, вместо заголовков запроса. В их числе: Set-Cookie указывается в запросе вот так:
    Cookie: PHPSESSID=j0ljhjf6cpsdk3sgoceil433f7; browserId=9yN9xPY97qxkZU5y4Nx7hjQR7MxihD; _identity=%5B1470002%2C%226pDBXod5e1A1V4BfDr6iKkh0ryMvxIxy%22%2C2592000%5D;  lastLoggedInUserId=1470002; isLoggedIn=1;

    В Advanced Rest API оно работает, потому что он просто передает Cookie от вашего браузера, ввиду того что в запросе заголовок Cookie отсутствует.
    Ответ написан
    Комментировать
  • Как сделать публичный API на основе приватного?

    piromanlynx
    @piromanlynx
    Системный администратор в Perfect Solutions
    Просто написать proxy-прослойку в которую добавлено всё что нужно (авторизация, прочее) и убрано всё что не нужно (какие то внутренние вещи отфильтрованы в выводе).
    Такой api-proxy пишется очень легко и быстро на любом языке и даже не требует каких либо фреймворков. Последняя такая реализация у меня заняла около 900 строк в 4х файлах.
    Ответ написан
    Комментировать
  • Как установить несколько версий PHP на VPS Centos 7?

    piromanlynx
    @piromanlynx
    Системный администратор в Perfect Solutions
    Соберите каждую версию из иходников с --prefix
    • /opt/php5.3
    • /opt/php5.4
    • /opt/php5.5
    • /opt/php5.6
    • /opt/php7.0

    И заведите нужные FPM из них. По первому разу будет сложно, но я думаю Вы напишите скрипт и второй раз уже не будете собирать руками все версии php :-)
    Ответ написан
    Комментировать
  • Апач на arch linux стартует с ошибкой "libreadline.so.7: cannot open shared object file: No such file or directory". Как исправить?

    piromanlynx
    @piromanlynx
    Системный администратор в Perfect Solutions
    Находите modules/libphp7.so. смотрите на него с помощью ldd:
    # ldd modules/libphp7.so
    видите каких либ не хватает:
    linux-vdso.so.1 (0x00007ffda62f8000)
    	libedit.so.2 => /usr/lib/x86_64-linux-gnu/libedit.so.2 (0x00007fdb4dc50000)
    	libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007fdb4da20000)
    	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fdb4d670000)
    	libreadline.so.7 => not found
    	/lib64/ld-linux-x86-64.so.2 (0x00007fdb4e098000)

    ага, значит libreadline.so.7 не находит. Смотрим есть ли она на самом деле и где:
    # find /usr -name 'libreadline.so*'
    Если все таки есть: то делаем от рута:
    # ldconfig
    И повторяем ldd modules/libphp7.so - нашлась либа? более не not found?

    Если же либы нет (find не дал результатов), то нужно установить ее.
    Ответ написан
    Комментировать
  • Как решить проблему при обновлении composer?

    piromanlynx
    @piromanlynx
    Системный администратор в Perfect Solutions
    1. сделайте бекап папки vendor, composer.json, composer.lock
    2. удалите папку vendor в вашем проекте.
    3. выполните composer install (появится новый не битый vendor)
    4. выполните composer update

    Если что то пошло не так - не потеряйте бекап)
    Ответ написан
    2 комментария
  • Почему не работает php код в Wordpress после вызова функции?

    piromanlynx
    @piromanlynx
    Системный администратор в Perfect Solutions
    В том что на этой функции код падает по ошибке. Если ошибку не видно в браузере, то скорее всего ее видно в логах (смотрите error.log-и пхп,апача,nginx, возможно сама cms имеет свои логи).
    Так же, если ошибок нет, возможно внутри функции есть die/exit или что то подобное
    Ответ написан
    Комментировать
  • Как настроить Debug режим, если исходники лежат в Docker?

    piromanlynx
    @piromanlynx
    Системный администратор в Perfect Solutions
    Из конфига в уме видно плохо в чем дело.... Могу посоветовать как отладить:

    1. Проверьте во все нужные стороны с помощью telnet - открывается ли коннект.
    2. "php5-fpm -i" и "php5-fpm -m" внутри докера (если там fpm) чтобы увидеть реально цепляется ли xdebug и настройки. Ну либо phpinfo();...
    3. посмотрите на netstat -ant внутри докера и снаружи - чтобы понимать что происходит с коннектом, открывается ли он и где теряется
    4. в крайнем случае tcpdump на хосте

    и вот тут (https://xdebug.org/docs/all_settings ) есть про xdebug.remote_connect_back , возможно натолкнет на мысли. И помоему у докера были уже готовые образы с fpm и настроенным xdebug под phpstorm
    Ответ написан
    Комментировать
  • Старые взломанные CMS на Joomla и WordPress. Как решать проблему?

    piromanlynx
    @piromanlynx
    Системный администратор в Perfect Solutions
    1. Вычистить вирусню: clamscan + читать maillog + трейсить вызовы mail.
    2. Поставить и настроить suhosin если это преемлимо
    3. Все сайты которые возможно использовать в режиме ридонли для fs.
    4. В зависимости от cms запретить execute в директориях где не положено.
    5. Если есть опыт - настроить naxsi для фильтрафии SQL-инекций
    6. Иметь в итоге "чистый" бекап для возможности всё откатить на состояние без вирусов и мониторить активность.

    Я бы мог даже взяться за это за недорого, ибо полдела автоматизировано. Вообще это задачка для автоматизации рутины - такой вопрос надо решить один раз и навсегда, ибо будут новые сайты на новых cms с новыми дырами и они тоже со временем станут старыми
    Ответ написан
    Комментировать
  • Как в composer подменить пакет?

    piromanlynx
    @piromanlynx
    Системный администратор в Perfect Solutions
    1. "просто и тупо" положите развернутую либо как git submodule и разворачивайте как сабмодуль из своей репы.
    2. "хитро и глючно" - придется воспроизвести этот сценарий через bash скрипт, но обещаю что рано или поздно оно сглючит когда "что-то где-то изменится"
    Ответ написан
  • Как обычно называют папку в которой хранят такие файлы?

    piromanlynx
    @piromanlynx
    Системный администратор в Perfect Solutions
    В yii есть понятие ConsoleController. В понятиях mvc это контроллер. Только для консоли, нсли я верно понял вопрос
    Ответ написан
    Комментировать
  • Из-за чего ничего не отображает PHP CLI?

    piromanlynx
    @piromanlynx
    Системный администратор в Perfect Solutions
    Скорее всего падает до начала любого вывода, а в php.ini отключен весь вывод ошибок.
    Проверьте: php скпирт.php && echo ok
    Если в консоли не появился "ok" значит и правда упало.
    Второй вариант - где то закрался die/exit до начала вывода
    Ответ написан
    5 комментариев
  • Как правильно настраивать дев-окружение для веб-разработки?

    piromanlynx
    @piromanlynx
    Системный администратор в Perfect Solutions
    Используйте puppet/ansible/... и не думайте об этом вообще
    Ответ написан
    Комментировать
  • Как включить модули из под PHP CLI как из под Apache?

    piromanlynx
    @piromanlynx
    Системный администратор в Perfect Solutions
    Варианты источника проблемы:
    • У пользователя нет прав к .so файлу модуля
    • У пользователя нет прав к определенынм ini файлам конфигурации


    Обычно когда запускается "php -m" - можно увидеть Warning-и о том что он что-то не смог.
    Называется это startup_errors - посмотрите основной php.ini и включите опцию чтобы их показывать: display_startup_errors
    Ответ написан
    Комментировать
  • Как узнать, какие библиотеки php подключены?

    piromanlynx
    @piromanlynx
    Системный администратор в Perfect Solutions
    $ php -m
    Ответ написан
    Комментировать
  • Как поймать ошибку в корн-скрипте и не упасть в Error?

    piromanlynx
    @piromanlynx Автор вопроса
    Системный администратор в Perfect Solutions
    Пока сам придумал тупой способ отфоркать процесс:

    foreach ($all as $one) {
        $pid = pcntl_fork();
        if ($pid == -1) {
           die('could not fork');
        } else if ($pid) {
          pcntl_wait($status); //Protect against Zombie children
          continue;
        } else {
          $one->doSomething(); 
          exit(0);
        }
    }
    
    Ответ написан