Apache не регистрирует ошибки php - PullRequest
20 голосов
/ 21 ноября 2011

PHP через CLI успешно регистрирует ошибки в /var/log/php_errors.log.

Но apache + php не регистрирует ошибки.

[bla@notebook ~]$ apachectl -v
Server version: Apache/2.2.17 (Unix)
Server built:   May 19 2011 03:15:39

[bla@notebook ~]$ php -v
PHP 5.3.6 with Suhosin-Patch (cli) (built: Mar 23 2011 13:28:00) 
Copyright (c) 1997-2011 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2011 Zend Technologies

В php.ini У меня есть:

display_errors = On
error_reporting = E_ALL | E_STRICT
log_errors = On
error_log = php_errors.log

In httpd.conf :

ErrorLog "/var/log/httpd/error_log"

Права доступа:

[bla@notebook /]$ ls -la /var/log/httpd/
-rwxrwxr-x 1 root root 133351 21.11.2011 11:18 access_log*
-rwxrwxr-x 1 root http   1307 21.11.2011 11:18 error_log*

[bla@notebook /]$ ls -la /var/log/php_errors.log 
-rwxrwxr-x 1 root http 521 14.11.2011 17:31 /var/log/php_errors.log*

Как видите, демон Apache имеет права на запись в файлы журналов.

Все еще нет ошибок от Apache или PHP в /var/log/php_errors.log и /var/log/httpd/error_log.

ОБНОВЛЕНИЕ 1.

Изменил эту строку в php.ini:

error_log = php_errors.log 

к полному пути:

error_log = /var/log/php_errors.log 

Разрешения были в порядке. Но если у кого-то также есть проблемы с этим, вы можете отладить настройку разрешений для файла журнала 0777 или изменить владельца файла.

Ответы [ 6 ]

9 голосов
/ 21 ноября 2011

Обычно есть два отдельных файла php.ini для Apache и CLI - вы уверены, что смотрите правильный?

Edit:

2 варианта, которые я могу придумать:

  • некоторые директивы Apache портят путь журнала PHP (или отключают параметры ведения журнала, хотя это маловероятно) - попробуйте установить абсолютный путь к файлу журнала в php.ini (@Frosty Z предложил что-то как это)
  • Я заметил, что к вашей установке PHP применено исправление Suhosin, которое вносит несколько ограничительных изменений для повышения безопасности. И хотя теоретически у пользователя в группе пользователей http достаточно прав для записи в файл журнала - возможно, существует некоторое поведение, подобное suphp, и когда к вашему скрипту обращаются через Интернет, он выполняется с / в качестве имени пользователя, которое установить его владельцем (владельцем файла скрипта, который есть) - попробуйте изменить его.
5 голосов
/ 18 июля 2013

У меня была такая же проблема.

Настройка log_errors_max_len = 0 в php.ini работает для меня.

Руководство по PHP :

Установить максимальную длину log_errors в байтах,В error_log добавлена ​​информация об источнике. По умолчанию 1024, а 0 позволяет вообще не применять максимальную длину .Эта длина применяется к зарегистрированным ошибкам, отображаемым ошибкам, а также к $ php_errormsg, но не к явно вызываемым функциям, таким как error_log ().

2 голосов
/ 13 июня 2013

Раньше у меня не было журналов ошибок в двух случаях:

  1. У пользователя, под которым работал Apache, не было прав на изменение файла php_error_log.
  2. Ошибка 500произошла из-за неправильной конфигурации .htaccess, например, из-за неправильной настройки модуля перезаписи.В этом случае ошибки записываются в файл Apache error_log.
0 голосов
/ 12 декабря 2017

Это также может быть вызвано собственной директивой Apache LogLevel, которая при слишком высоком значении отменит логирование в PHP. Однако он не отменяет способность PHP выводить ошибки на странице, т.е. display_error, а также не влияет на CLI PHP. Стоит посмотреть, если у вас есть именно этот набор симптомов.

0 голосов
/ 11 октября 2017

httpd.conf не единственное место, где может сидеть конфиг Apache,

Например:

если вы используете безопасное соединение https:// ваши дополнительные настройки будут преобладать, и вам нужно будет искать конфигурацию в файлах, таких как /opt/local/apache2/conf/extra/httpd-ssl.conf

вы можете найти там что-то вроде:

ErrorLog "/var/log/apache/ssl_error.log"

И вы не увидите ошибок, зарегистрированных в обычном файле журнала, но все они перейдут в ssl_error.log

0 голосов
/ 21 ноября 2011

Проверьте, к какому PHP-скрипту вы обращаетесь, и как Apache настроен для доступа к нему.

В некоторых конфигурациях (например, виртуальных хостах, определенных каталогах ...) для файла error_log может быть задан путь / имя, отличное от имени по умолчанию.

Я бы тогда предложил проверить ваши конфигурационные файлы Apache.

...