The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Отладка 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.
 
07.09.2008 , Автор: Pavel Piatruk
Ключи: strace, php, debug / Лицензия: CC-BY
Раздел:    Корень / Программисту и web-разработчику / PHP / Серверная часть и интерпретатор

Обсуждение [ RSS ]
  • 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, как предлагает автор статьи.
    А если вспомнить, что это средство штатное, то как раз вопросы "зачем? а ты что не знал?...." вызывает способ автора.....

     

  • 3, одмин (?), 15:29, 08/09/2008 [ответить]  
  • +/
    use xdebug, luke
     
     
  • 4, Аноним (4), 15:58, 08/09/2008 [^] [^^] [^^^] [ответить]  
  • +/
    Верно мыслишь товарисч.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру