Apache 不记录 php 错误

2022-08-30 17:51:36

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 的设置权限或更改文件所有者。


答案 1

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

编辑:

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

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

答案 2

我遇到了同样的问题。

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

PHP手册

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


推荐