Вопрос или проблема
Я только что обновил свой сервер до 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 в отдельный файл:
-
Обновление конфигурации PHP: После обновления системы или файлов конфигурации, как, например, в случае с
.rpmnew
, важно убедиться, что настройки вphp.ini
остались неизменными. Проверьте следующие параметры:log_errors = On error_log = /var/log/php-errors.log
Проверьте, что файл
php.ini
имеет соответствующий синтаксис и что нет конфигурационных конфликтов, которые могли бы перенастроить логирование ошибок. -
Проверка прав доступа: Убедитесь, что файл
/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 не сможет записывать в указанный файл.
-
Тестирование записи ошибок: Вставьте в ваш PHP-код вызов:
error_log('test');
Это позволит проверить, куда именно записывается лог. Если в
/var/log/php-errors.log
ничего не появляется, возможно потребуется пересмотреть конфигурационные файлы либо проверить журналы сервера на наличие дополнительных подсказок. -
Проверка глобальных и локальных настроек: Иногда PHP может запускаться в различных окружениях (CLI, CGI), которые имеют свои конфигурации. Убедитесь, что именно нужная конфигурация используется для веб-запросов. Это можно сделать, используя функцию
phpinfo()
. -
Изменение пути для тестирования: Временно измените путь для
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, так как конфигурационные изменения могут происходить от версии к версии.