Вопрос или проблема
Я установил LEMP с PHP8 на Ubuntu 24.04 и смог разместить сайт на WordPress.
Единственное, что я не могу понять, это где регистрируются ошибки PHP.
Например, я создал PHP-страницу с ошибкой:
<?php
phpinfo1();
?>
когда я открываю эту страницу, браузер отображает это:
в /var/log/php8.3-fpm.log
не появляются сообщения об ошибках.
Я добавил
error_log = /var/log/php8-error-log.log
в /etc/php/8.3/fpm/php.ini
:
перезапустил службу php-fpm
sudo service php8.3-fpm restart
и открыл мою страницу с ошибкой, но файл /var/log/php8-error-log.log
так и не был создан.
Ниже я привел моя phpinfo()
:
Ответ или решение
Вопрос, где регистрируются ошибки синтаксиса PHP8, особенно в контексте использования системы LEMP на Ubuntu 24.04, является актуальным и весьма интересным. Давайте рассмотрим его более подробно.
Теория
PHP — это язык серверного программирования, где ошибки и уведомления могут появляться по различным причинам, начиная от синтаксических ошибок и заканчивая проблемами с конфигурацией. В стандартной конфигурации PHP ошибки на экран не выводятся для повышения безопасности и улучшения пользовательского опыта, особенно на продуктивных системах. Они, как правило, записываются в журналы, что позволяет администраторам и разработчикам более эффективно управлять и отлаживать их.
В PHP8, как и в предыдущих версиях, ярды ошибок могут быть двух типов:
- Синтаксические ошибки – Возникают, когда код имеет неправильную грамматику.
- Ошибка времени выполнения – Возникает в процессе выполнения, как в случае с вызовом несуществующей функции.
Записи об этих ошибках могут храниться в нескольких местах в зависимости от конфигурации сервера и самого языка PHP.
Пример
Ваш случай иллюстрирует проблему с выполнением PHP-кода, в котором имеется ошибка синтаксиса: phpinfo1();
. Предположительно, вызов функции phpinfo1()
невоспринимается интерпретатором PHP должным образом, так как PHP не знает о существовании такой функции.
Вы указали, что при просмотре страницы в браузере не было видно сообщений об ошибках, и никаких записей не было в файлах журналов, которые вам удалось проверить (/var/log/php8.3-fpm.log
и /var/log/php8-error-log.log
).
В конфигурационном файле вы были настроены error_log
, указав файл /var/log/php8-error-log.log
как место для записи, а также перезапустили сервис PHP-FPM. Однако файл журнала не создается, что может быть следствием:
- Необходимости дополнительных изменений в других конфигурационных файлах, например, в
www.conf
. - Отсутствия прав на запись в указанный каталог.
- Неправильной настройки других параметров журнала ошибок в php.ini.
Применение
Чтобы правильно настроить регистрацию ошибок в PHP8 на вашей системе, следуйте следующим шагам:
-
Проверка прав доступа. Убедитесь, что PHP-FPM имеет права на запись в каталог
/var/log/
. Это можно сделать через изменение прав доступа с помощью командchown
иchmod
.sudo chown -R www-data:www-data /var/log/ sudo chmod -R 755 /var/log/
-
Проверка конфигурации
php.ini
. Убедитесь, что в конфигурационном файле для вашего интерфейса PHP (в данном случаеfpm
) установлены следующие параметры:display_errors = Off log_errors = On error_reporting = E_ALL error_log = /var/log/php8-error-log.log
Параметр
log_errors
должен быть включен для того, чтобы PHP записывал ошибки в журналы.error_reporting
должен быть настроен наE_ALL
для логирования всех видов ошибок. -
Проверка конфигурации PHP-FPM. В файле конфигурации пулы процессов PHP-FPM, обычно находящегося по пути
/etc/php/8.3/fpm/pool.d/www.conf
, убедитесь, что параметрcatch_workers_output
установлен вyes
. Это нужно для правильной процедуры записи выходных данных рабочих процессов PHP-FPM. -
Перезагрузка службы PHP-FPM. После всех изменений перезапустите службу PHP-FPM.
sudo service php8.3-fpm restart
-
Тестирование заново. Теперь создайте и откройте файл с намеренной ошибкой, чтобы проверить, создается ли файл
php8-error-log.log
. Убедитесь, что синтаксическая ошибка не выводится на экран и предотвращает отображение содержимого страницы, так как это нормальное поведение для синтаксических ошибок.
Если после выполнения всех вышеуказанных шагов ошибки PHP все еще не регистрируются, рассмотрите возможность использовать внутренний механизм журналов веб-сервера (например, Nginx) для диагностики, так как он может также генерировать и записывать сообщения об ошибках при взаимодействии с PHP-FPM.
При проблемах с регистрацией ошибок всегда стоит проверять конфигурационные файлы на предмет ошибок синтаксиса самих кластеров конфигурации. Запись логов — это важный аспект администрирования серверов, так как позволяет быстрее находить и исправлять ошибки в работе приложений.