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

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

Я только что обновил свой сервер до Fedora 17 и объединил некоторые файлы конфигурации с .rpmnew в существующие. Я успешно регистрировал свои ошибки PHP в отдельный файл журнала, оставив следующее в php.ini:

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

Я не уверен, почему ошибки регистрируются в /var/log/httpd/error_log после обновления, несмотря на сохранение приведенных выше настроек.

Также,

$ ls -l /var/log/php-errors.log
-rwxrwxr--. 1 apache myself 232 Dec 13 16:49 /var/log/php-errors.log

показывает, что apache владеет файлом журнала ошибок PHP.

Что может быть причиной того, что ошибки PHP регистрируются в файле журнала ошибок apache?

Я думаю, что здесь это просто общие ошибки Apache, которые видны в /var/log/httpd/error_log.

Я бы добавил вызов error_log('test'); в некоторую PHP-логику, которая должна быть интерпретирована при обновлении конкретной страницы, и если это не видно в /var/log/php-errors.log, тогда я бы предположил, что обновленные версии имеют какую-то другую конфигурацию или схему разрешений, из-за которой старая конфигурация перестала работать.

Я рекомендую просмотреть раздел ‘Обработка ошибок и ведение журнала’ в /etc/php/php.ini и проверить правильные значения для других директив. Директива error_reporting должна быть установлена в E_ALL или E_ALL & ~E_DEPRECATED & ~E_STRICT. Директива log_errors должна быть On.

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

Я также рекомендую указать /tmp/php_error_log для error_log, обновить страницу и затем выполнить ls /tmp, чтобы проверить, появился ли файл там.

Если файла там нет, войдите как root и выполните поиск по имени файла по всей файловой системе, чтобы увидеть, где он оказался.

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

Могу сказать, что в Arch Linux с Apache 2.4, PHP 5.5.11 и systemd версии 212-1 вышеуказанная конфигурация приведет к тому, что PHP-журнал ошибок окажется в чем-то похожем на /tmp/systemd-private-65d4c3e3cc534155bcf3ec708c2362f6-httpd.service-h8MSsD/tmp/php_error_log.

.

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

Чтобы журналировать ошибки PHP в отдельный файл, необходимо убедиться, что конфигурация PHP и настройки сервера корректно сконфигурированы. Рассмотрим основные шаги и возможные причины, почему ошибки начали записываться в лог Apache.

Шаги настройки для логирования ошибок PHP в отдельный файл:

  1. Обновление конфигурации PHP: После обновления системы или файлов конфигурации, как, например, в случае с .rpmnew, важно убедиться, что настройки в php.ini остались неизменными. Проверьте следующие параметры:

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

    Проверьте, что файл php.ini имеет соответствующий синтаксис и что нет конфигурационных конфликтов, которые могли бы перенастроить логирование ошибок.

  2. Проверка прав доступа: Убедитесь, что файл /var/log/php-errors.log имеет правильные права доступа и принадлежит пользователю, под которым работает веб-сервер (обычно это apache, www-data или nginx):

    $ ls -l /var/log/php-errors.log
    -rwxrwxr--. 1 apache myself 232 Dec 13 16:49 /var/log/php-errors.log

    Если права доступа или владелец изменились в процессе обновления, это может привести к тому, что PHP не сможет записывать в указанный файл.

  3. Тестирование записи ошибок: Вставьте в ваш PHP-код вызов:

    error_log('test');

    Это позволит проверить, куда именно записывается лог. Если в /var/log/php-errors.log ничего не появляется, возможно потребуется пересмотреть конфигурационные файлы либо проверить журналы сервера на наличие дополнительных подсказок.

  4. Проверка глобальных и локальных настроек: Иногда PHP может запускаться в различных окружениях (CLI, CGI), которые имеют свои конфигурации. Убедитесь, что именно нужная конфигурация используется для веб-запросов. Это можно сделать, используя функцию phpinfo().

  5. Изменение пути для тестирования: Временно измените путь для error_log, установив его, например, в /tmp/php_error_log:

    error_log = /tmp/php_error_log

    Это позволит быстро увидеть, создается ли файл и где находятся возможные проблемы с доступом.

Если после проверки всех этих пунктов проблема сохраняется, возможно, в новых версиях ПО были внесены изменения, которые требуют переосмысления конфигурации. Бывает так, что при обновлениях меняются пути по умолчанию или методы управления сервисами, особенно при переходе между разными системами и версиями, как в вашем случае с Fedora 17.

Для окончательной диагностики можно выполнить поиск файла с помощью:

find / -name 'php_error_log' 2>/dev/null

Это сканирует систему на наличие файла, чтобы понять, куда могли записываться логи, и устранить несоответствия. Если никаких изменений нет, проблема может быть связана с изменением поведения системных сервисов, такими как systemd, которые могут перенаправить стандартные выходы сервисов в собственные логи.

Всегда проверяйте актуальную документацию для используемой версии PHP и Apache, так как конфигурационные изменения могут происходить от версии к версии.

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

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