Подтвердить что ты не робот

Apache не регистрирует ошибки php

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

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

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

[[email protected] ~]$ 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

В httpd.conf:

ErrorLog "/var/log/httpd/error_log"

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

[[email protected] /]$ 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*

[[email protected] /]$ 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 или изменять владельца файла.

4b9b3361

Ответ 1

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

Edit:

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

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

Ответ 2

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

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

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

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

Ответ 3

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

  • Пользователь, под которым выполнялся Apache, не имел прав на изменение файла php_error_log.
  • Ошибка 500 произошла из-за плохой конфигурации .htaccess, например неправильных настроек модуля перезаписи. В этой ситуации ошибки записываются в файл Apache error_log.

Ответ 4

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

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

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

Ответ 5

httpd.conf - это не единственное место, где может находиться конфигурация Apache,

Например:

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

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

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

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

Ответ 6

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

Ответ 7

Проверка лог-лога на нужном сервере помогла мне... facepalm

Ответ 8

Apache может управляться несколькими пользователями. Поэтому используйте ps aux | egrep '(apache|httpd)', чтобы узнать, кто работает с apache. Если он запускается пользователем root, запустите apache с помощью sudo.