Отладка php скриптов на стороне сервера |
[исправить] |
Иногда пользовательские скрипты или зависают, или хотят соединиться с чем-то
запрещенным в файрволе,
или интерпретатор неожиданно вылетает, не передав заголовок Content-type, что
приводит к ошибке 500.
Для того, чтобы разобраться в причине, попробуем отладить скрипты со стороны сервера,
не залезая в код php. Сначала придется изменить конфигурацию apache, чтобы php
работало через suphp,
а не через модуль mod_php5. Я не буду рассказывать, как это делается. Главное, кроме обычного,
"неотладочного", надо добавить свой обработчик в suphp.conf:
x-httpd-php_debug=php:/usr/local/bin/php-cgi.sh
А вот содержимое этого скрипта /usr/local/bin/php-cgi.sh. Поставьте ему права 755.
Видно, что он запускает отладчиком php с перенаправлением отладочной информации в файл.
#!/bin/bash
/usr/bin/strace /usr/bin/php5-cgi $@ 2>/tmp/debug
Не забудьте добавить этот обработчик в конфиг apache , это делается строкой
suPHP_AddHandler x-httpd-php_debug
Затем в .htaccess нужного сайта допишите
AddHandler x-httpd-php_debug .php
В результате после повторной загрузки сайта появится файл /tmp/debug, в который будет добавляться
отладочная информация о работе php нужного сайта. В это время лучше ограничить посещение сайта,
разрешив только 1 IP адрес, чтобы отладочной информации не было чрезмерно.
Обычно будет достаточно имени системного вызова, который приводит к прекращению
выполнения скрипта.
Можно поиграться с параметрами strace.
|
|
|
|
Раздел: Корень / Программисту и web-разработчику / PHP / Серверная часть и интерпретатор |
1, angra (ok), 18:06, 07/09/2008 [ответить]
| +/– |
Ничего что есть разница между выполнением под php-cgi и mod_php? Ничего что cgi сценарий можно просто выполнить из консоли(сформировав ему нужные переменные окружения) вместо остановки сервиса?
| |
|
2, Piatruk.P (?), 02:35, 08/09/2008 [^] [^^] [^^^] [ответить]
| +/– |
Насчет различий в cgi и mod_php. В случае mod_php вообще не вижу корректного способа отладки. Если видите, то подскажите. Формирование переменных -долгое и нудное занятие, если это не повседневная необходимость. Сервис останавливать необязательно, можно перенести скрипты на другой виртуальный хост и т.д.
| |
|
5, dart (??), 11:10, 09/09/2008 [^] [^^] [^^^] [ответить]
| +/– |
> В случае mod_php вообще не вижу корректного способа отладки. Если видите, то подскажите.
tail /var/log/httpd-error.log
Ничуть не глупее, чем чтение "невероятного" файла /tmp/DEBUG, как предлагает автор статьи.
А если вспомнить, что это средство штатное, то как раз вопросы "зачем? а ты что не знал?...." вызывает способ автора.....
| |
|
|
|