Лог ошибок PHP


Когда на сервере не работает один из сайтов — причины следует искать в программном коде, прежде всего следует изучить лог ошибок РНР (актуально для большинства сайтов, РНР является самым популярным языком веб-программирования). В рамках материала рассмотрено как включить лог ошибок php.



Включение лога ошибок PHP в php.ini


Все параметры РНР — в том числе, версия — задаются в файле php.ini, в нем же включается ведение лога программных ошибок. Если для сервера используется какая-либо панель управления — логирование можно включить в ней, если настройки сделаны вручную, то и ведение лога нужно включать вручную.


Делается это следующим образом:

display_errors = Off
log_errors = On
error_log = /var/log/php-errors.log

При активации display_errors ошибки будут выводится на экран, в директиве error_log задается путь к файлу, в который будет писаться информация необходимая для отладки проекта.



Затем нужно создать файл php-errors.log, на него необходимо выставить права позволяющие веб-серверу записывать в файл данные. В Debian подобных системах Apache работает от имени системного пользователя www-data

touch /var/log/php-errors.log

chown www-data: /var/log/php-errors.log



Затем нужно перезапустить веб-сервер, для Debian/Ubuntu

systemctl reload apache2

Для Centos

systemctl reload httpd

Получилось или нет можно увидеть в phpinfo. Там же можно посмотреть режим работы РНР (если это Apache Handler, то есть еще один способ включения лога, об этом ниже).



Как узнать еще режим работы PHP и текущее значение параметра error_log


Можно создать в корне сайта, работающего с сервера файл phpinfo и поместить в него одну функцию

<?php

phpinfo();

?>

И обратиться к файлу из браузера

http://sitename.com/phpinfo.php




Если применяются редиректы может потребоваться временно переименовать файл .htaccess в корне сайта.




В выводе phpinfo.php можно будет увидеть всю информацию о существующих настройках РНР


как проверить режим работы PHP



Режим работы РНР в примере Apache 2.0 Handler — РНР работает в режиме модуля веб-сервера.

Значение error_log отсутствует, значит в данной конфигурации логирование на уровне конфигурации сервера не включено.


Включить лог ошибок PHP




Описанный выше порядок действий позволит включить логирование ошибок РНР при любом режиме работы РНР. При отладке работы сайта при конфигурации с mod-apache следует также проверять логи веб-сервера.

Вся информация будет в них, логи нужно искать в /var/log/apache2 и /var/log/httpd в зависимости от дистрибутива. Лог можно найти выполнив

grep -rl sitename.com /etc/apache

grep -i log файл_из_вывода_предыдущей_команды | grep log



Как включить лог ошибок php в .htacccess при использовании Apache с mod_php


При использовании Apache с mod_php есть альтернативный вариант не требующий редактирования php.ini.



В .htaccess в корне сайта добавляется:

php_flag log_errors On
php_value error_log /var/log/php-errors.log


Выключается логирование установкой основной опции в Off

php_flag log_errors Off



Плюс такого способа в том, что его можно использовать на серверах где нет root доступа. Настройки будут применяться не ко всему серверу, а только к сайту в корне которого добавлен .htaccess.

С fast_cgi директива php_flag работать не будет — возникнет ошибка 500.



Читайте про ошибку 500 и ее причины. Очень часто она появляется как следствие неверной отработки скриптов или настроек сервера не удовлетворяющим требованиям программного кода сайта.

Сказать спасибо