PHP

Вывод всех ошибок PHP в log файл для получения детальной информаций

PHP предлагает простое, но эффективное решение для вывода лога всех ошибок в лог файл. На всех продакшен рабочих-серверах необходимо отключить отображение вывода всех ошибок для конечных пользователей в браузер. Помните, PHP выдает много информаций о путях, схемах базы данных и другой сортированной и конфиденциальной информаций. Настоятельно рекомендуется ведения журнала ошибок вместо отображения на рабочих сайтах. Идея довольно проста, только разработчик должен иметь возможность видеть журнал ошибок PHP.

Где расположен файл php.ini

По умолчанию пути к файлу подобны расположению следующим популярным unix системам:

  • CentOS Linux/RHEL v5.x/6.x/7.x/8.x/9.x : /etc/php.ini
  • Ubuntu / Debian Linux (PHP 7 fpm) : /etc/php/7.0/fpm/php.ini
  • Ubuntu / Debian Linux (PHP 5.6 fpm) : /etc/php/5.6/fpm/php.ini
  • Ubuntu / Debian Linux (PHP 8.1 fpm) : /etc/php/8.1/fpm/php.ini
  • Ubuntu / Debian Linux (PHP 7 with Apache 2) : /etc/php/5.6/apache2/php.ini
  • Ubuntu / Debian Linux (PHP 5.6 with Apache 2) : /etc/php/7/apache2/php.ini
  • FreeBSD unix server v9.x/10.x/11.x/12.x/13.x+: /usr/local/etc/php.ini

Вы можете использовать следующую команду для поиска пути к файлу php.ini. Пример:

php5-cgi -i | grep php.ini

Вывод:

Loaded Configuration File /etc/php5/cgi/php.ini
php-fpm5.0 -i | grep php.ini
php-fpm7.0 -i | grep php.ini
php-fpm8.1 -i | grep php.ini

Пример вывода для моей PHP версий 8.1 на сервере Ubuntu LTS 22.04:

Configuration File (php.ini) Path => /etc/php/8.1/fpm
Loaded Configuration File => /etc/php/8.1/fpm/php.ini

Как записывать все ошибки PHP в Log файл?

Просто добавьте строчку в /etc/php.ini с определением файла куда нужно записывать журнал ошибок. Укажите /var/log/php-scripts.log или /var/log/httpd/php-error.log. Для редактирования используйте текстовый редактор такой как vi/vim или nano:

vi /etc/php.ini

Найдите и модифицируйте директиву error_log как показано ниже:

error_log = /var/log/php-scripts.log

Убедитесь что display_errors установлена в Off (не показывать ошибки конечным пользователям):

display_errors = Off

Сохраните и закройте файл. Перезагрузите web сервер Apache или php-fpm сервис подходящим следующим вариантом:

/etc/init.d/httpd restart
systemctl restart httpd
sudo systemctl restart php7.0-fpm.service
sudo systemctl restart php-fpm

Как записывать ошибки в журнал Windows Server или syslog?

Измените error_log как в примере ниже:

error_log = syslog

Как посмотреть логи?

Залогиньтесь используя ssh или скачайте файл /var/log/php-scripts.log используя sftp клиент. Для примера используется команда tail:

sudo tail -f /var/log/php-scripts.log

Вывод:

Замечания о пользователях php-fpm

Нужно отредактировать файл конфига php-fpm расположенному по пути похожему на этот /etc/php81/php-fpm.d/www.conf. Добавьте в него следующие строчки:

php_flag[display_errors] = off                                                    
php_admin_value[error_log] = /var/log/nginx/php.error.log                         
php_admin_flag[log_errors] = on

Перезапустите сервис php-fpm.

/etc/init.d/php-fpm81 restart
#или используя service command
service php-fpm81 restart
 * Stopping PHP FastCGI Process Manager ...  [ ok ]
 * Checking /etc/php81/php-fpm.conf ...
 * Starting PHP FastCGI Process Manager ...  [ ok ]

В итоге

Именно так мы записываем все ошибки в лог файла, когда используем PHP на стороне сервера в качестве языка программирования. Это очень полезно для устранения проблем с вашими web-приложениями созданными с использованием PHP под управлением Linux, BSD или Unix-подобными облачными серверами.

To top