Где регистрируются синтаксические ошибки PHP8?

Вопрос или проблема

Я установил LEMP с PHP8 на Ubuntu 24.04 и смог разместить сайт на WordPress.

Единственное, что я не могу понять, это где регистрируются ошибки PHP.

Например, я создал PHP-страницу с ошибкой:

<?php

phpinfo1();

?>

когда я открываю эту страницу, браузер отображает это:

enter image description here

в /var/log/php8.3-fpm.log не появляются сообщения об ошибках.

Я добавил

error_log = /var/log/php8-error-log.log

в /etc/php/8.3/fpm/php.ini:

enter image description here

перезапустил службу php-fpm

sudo service php8.3-fpm restart

и открыл мою страницу с ошибкой, но файл /var/log/php8-error-log.log так и не был создан.

Ниже я привел моя phpinfo():

enter image description here

Ответ или решение

Вопрос, где регистрируются ошибки синтаксиса PHP8, особенно в контексте использования системы LEMP на Ubuntu 24.04, является актуальным и весьма интересным. Давайте рассмотрим его более подробно.

Теория

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

В PHP8, как и в предыдущих версиях, ярды ошибок могут быть двух типов:

  1. Синтаксические ошибки – Возникают, когда код имеет неправильную грамматику.
  2. Ошибка времени выполнения – Возникает в процессе выполнения, как в случае с вызовом несуществующей функции.

Записи об этих ошибках могут храниться в нескольких местах в зависимости от конфигурации сервера и самого языка 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 на вашей системе, следуйте следующим шагам:

  1. Проверка прав доступа. Убедитесь, что PHP-FPM имеет права на запись в каталог /var/log/. Это можно сделать через изменение прав доступа с помощью команд chown и chmod.

    sudo chown -R www-data:www-data /var/log/
    sudo chmod -R 755 /var/log/
  2. Проверка конфигурации 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 для логирования всех видов ошибок.

  3. Проверка конфигурации PHP-FPM. В файле конфигурации пулы процессов PHP-FPM, обычно находящегося по пути /etc/php/8.3/fpm/pool.d/www.conf, убедитесь, что параметр catch_workers_output установлен в yes. Это нужно для правильной процедуры записи выходных данных рабочих процессов PHP-FPM.

  4. Перезагрузка службы PHP-FPM. После всех изменений перезапустите службу PHP-FPM.

    sudo service php8.3-fpm restart
  5. Тестирование заново. Теперь создайте и откройте файл с намеренной ошибкой, чтобы проверить, создается ли файл php8-error-log.log. Убедитесь, что синтаксическая ошибка не выводится на экран и предотвращает отображение содержимого страницы, так как это нормальное поведение для синтаксических ошибок.

Если после выполнения всех вышеуказанных шагов ошибки PHP все еще не регистрируются, рассмотрите возможность использовать внутренний механизм журналов веб-сервера (например, Nginx) для диагностики, так как он может также генерировать и записывать сообщения об ошибках при взаимодействии с PHP-FPM.

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

Оцените материал
Добавить комментарий

Капча загружается...