Apache不记录php错误

时间:2011-11-21 09:33:03

标签: php apache logging

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

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守护程序有权写入日志文件。

/var/log/php_errors.log和/ var / log / httpd / error_log中的Apache或PHP仍然没有错误。

更新1。

在php.ini中更改了这一行:

error_log = php_errors.log 

到完整路径:

error_log = /var/log/php_errors.log 

权限还可以。但如果有人也遇到问题,您可以调试日志文件0777的设置权限或更改文件所有者。

7 个答案:

答案 0 :(得分:9)

Apache和CLI通常有两个单独的php.ini文件 - 你确定你正在查看正确的文件吗?

编辑:

我能想到的另外两个选项:

  • 一些Apache指令正在弄乱PHP的日志路径(或禁用日志记录选项,虽然情况不太可能如此) - 尝试在php.ini中设置日志文件的绝对路径(@Frosty Z提示了一些东西像这样)
  • 我注意到您的PHP安装已应用Suhosin补丁,它会进行一些限制性修改以提高安全性。虽然从理论上讲,http用户组中的用户有足够的权限来写入日志文件 - 但可能存在类似suphp的行为,当您通过Web访问脚本时,它将以/作为用户名执行设置为它的所有者(脚本的文件所有者) - 尝试更改它。

答案 1 :(得分:5)

我遇到了同样的问题。

在php.ini中设置log_errors_max_len = 0对我有用。

PHP manual

  

设置log_errors的最大长度(以字节为单位)。在error_log中   添加有关源的信息。 默认值为1024和0   允许不应用任何最大长度。应用此长度   记录错误,显示错误以及$ php_errormsg,但不是   显式调用error_log()等函数。

答案 2 :(得分:2)

过去,我在两种情况下没有错误日志:

  1. 运行Apache的用户无权修改php_error_log文件。
  2. 由于.htaccess配置错误导致错误500,例如错误的重写模块设置。在这种情况下,会将错误记录到Apache error_log文件中。

答案 3 :(得分:0)

检查您正在访问的PHP脚本,以及如何配置Apache以进行访问。

在某些配置中(例如虚拟主机,特定目录......),error_log文件可以设置为与默认路径/名称不同的路径/名称。

然后我建议检查你的Apache配置文件。

答案 4 :(得分:0)

httpd.conf不是Apache配置可以独立的地方,

例如:

如果您使用安全连接https://,您的额外配置将占优势,您需要在/opt/local/apache2/conf/extra/httpd-ssl.conf

等文件中查找配置

你可以找到类似的东西:

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

您将看到普通日志文件中没有记录错误,但所有错误都将转到ssl_error.log

答案 5 :(得分:0)

这也可能是由Apache自己的LogLevel指令引起的,如果设置得太高,它将覆盖PHP的日志记录。但是,它不会覆盖PHP在页面上输出错误的能力,即display_error,也不会影响CLI PHP。值得研究一下你是否有这种特殊的症状。

答案 6 :(得分:0)

在正确的服务器上检查日志路径对我有帮助... facepalm