PHP error_log 方法不会将错误写入我的错误日志文件

Posted

技术标签:

【中文标题】PHP error_log 方法不会将错误写入我的错误日志文件【英文标题】:PHP error_log method doesn't write errors to my error log file 【发布时间】:2011-11-21 23:12:01 【问题描述】:

php error_log 方法不会将错误写入自定义错误日志文件。它只会写入 /var/log/apache2/php_error.log

这是我php.ini 中的日志记录设置:

error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE
display_errors = Off
log_errors = On
log_errors_max_len = 0 ; also tried with 9999999
error_log = /var/log/apache2/php_errors.log

PHP 将其错误写入常规 Apache 错误日志 (/var/log/apache2/error.log),而不是我在上面指定的那个。

我已经尝试过的事情:

    更改 php.ini 文件后,我停止并重新启动了 apache 文件/var/log/apache2/php_errors.log是777权限,文件存在。 没有其他覆盖 php.ini 文件。 (有 /etc/php5/cli/php.ini 但我没有使用 cli)。 在 php.ini 文件中没有其他 error_log = xxx 设置可以推翻第一个设置 phpinfo() 表示 error_log = /var/log/apache2/php_errors.log(即正确的文件),在本地值和主值下都有 我用来生成错误的测试脚本不包含任何 ini_set 调用

(仅供参考:我在 Ubuntu 11.04 上使用 Apache/2.2.17 和 PHP/5.3.5-1ubuntu7.2)

我做错了什么?

【问题讨论】:

您是否尝试将文件名更改为其他名称?还是试试其他文件夹? 检查加载了什么 php.ini 文件(查看 phpinfo() 函数的输出) 感谢 Olli,我将其更改为 /usr/php_errors.log,现在可以使用了! 很可能,您指定的日志文件或其所在文件夹的权限设置不正确,无法让 PHP 访问该文件。 我没有看到 PHP 代码,但有几个可能性: 1. 该设备已满。 2. 封闭目录缺少执行位,因此如果 PHP 正在检查文件是否存在;那将失败。简单的解决方案:[确保您的网络服务器用户可以 rwx 目录和 rw 文件]。 【参考方案1】:

我想回答这个问题,因为它在 Google 上的结果很高,尽管这是一个老问题。

我通过为日志目录上的所有用户添加写权限来解决这个问题。

在我的例子中,用户 'http' 需要能够写入 /var/log/httpd/ 所以我运行了

# chmod a+w /var/log/httpd

如果文件已经存在,先删除它并允许 Apache 创建它可能会有所帮助。

我的 php.ini 文件也包含了整个路径。

error_log = /var/log/httpd/php_errors.log

【讨论】:

谢谢。我在 IIS 服务器上遇到了这个确切的问题。问题在于它是网站的一部分需要基本身份验证,这会导致服务以具有不同权限的不同用户身份运行。【参考方案2】:

您可以尝试像这样指定文件名:

我在 Ubuntu 上使用 Apache 2.2.22。

使用这个 PHP 命令:

error_log("eric", 3, "/home/el/error.log");

第一个参数是要发送到错误日志的消息。第二个参数3 的意思是“期望一个文件名目的地。第三个参数是目的地。

创建文件 /home/el/error.log 并将其所有权设置为:

el@apollo:~$ ll error.log
-rwxrwxr-x 1 www-data www-data 7 Dec 13 14:30 error.log

当 PHP 解释 error_log 方法时,它会将消息附加到您的文件中。

来源: http://www.php.net/manual/en/function.error-log.php

【讨论】:

【参考方案3】:

确保 Apache 用户至少对日志文件路径中的任何父文件夹具有 EXECUTION 权限。没有它,Apache 无法列出文件夹中的任何内容,因此看不到日志文件。

ls
drwxr-x--- root adm folder

chmod o+x folder

ls
drwxr-x--x root adm folder

那是一个真正的陷阱! ;-)

之后,还要检查 Apache 用户是否具有对实际日志文件的读写权限。

【讨论】:

惊人的陷阱 :-) 你救了我! 您的个人资料很有趣!终于有人有个人资料了。和一个人类一样。那我也应该修好我的。很高兴看到有人和我差不多同时开始上网 :-) 对我来说,那是 1999 年在斯德哥尔摩爱立信做 javascript 和 Java 并发现 Linux。我是老咕噜!斯蒂芬·艾伯特 @Stephane,我知道这种感觉。在互联网上遇到一个真正的人总是很高兴;-)【参考方案4】:

您可以在 VirtualHost 站点配置文件中设置站点的错误日志文件,例如:/etc/apache2/sites-enabled/example.com.conf:

<VirtualHost *:80>

  ....

  ErrorLog $APACHE_LOG_DIR/www.example.com-error.log
  LogLevel warn
  CustomLog $APACHE_LOG_DIR/www.example.com-access.log combined

</VirtualHost>

在unix系统中$APACHE_LOG_DIR通常是/var/log/apache2 错误和访问将保存在$APACHE_LOG_DIR/www.example.com-error.log$APACHE_LOG_DIR/www.example.com-access.log

【讨论】:

【参考方案5】:

我遇到了这个问题,然后我授予了 apache 日志文件夹的正确权限,然后使用以下命令重新启动了我的 apache:

sudo chmod a+w /var/log/apache2/
sudo service apache2 restart

【讨论】:

【参考方案6】:

删除 php_errors.log 并重新启动 apache2,服务器本身将创建一个具有适当权限和所有者的新 php_errors.log 文件。

rm -f /var/log/apache2/php_errors.log
service apache2 restart

ll /var/log/apache2/php_errors.log

【讨论】:

【参考方案7】:

我今天花了几个小时试图弄清楚为什么这不起作用并尝试调试代码以解决我可以将任何内容记录到 php 错误日志的事实。不用说,在我开始伐木工作之前,我一直在以蜗牛的速度前进。

我猜 90% 以上的时间是权限问题。在我的情况下,守护进程是日志文件的所有者和组,我必须将 sudo su 设置为 root,然后更改日志文件的权限。我改为:

chmod 777 myphperror.log

感谢上帝的 ***.com

【讨论】:

OP 说他们已经检查了权限。您的回答没有添加任何内容。 当你的答案是 chmod 777 时,很有可能它不是正确的。

以上是关于PHP error_log 方法不会将错误写入我的错误日志文件的主要内容,如果未能解决你的问题,请参考以下文章

php添加系统日志

将所有 PHP 错误输出到数据库而不是 error_log

如何在PHP中写入错误日志文件[关闭]

如何将 PHP error_log 错误消息记录到 Apache 服务器 error_log?

如何使用php解决iis错误500上传文件

error_reporting函数引起的error_log配置失效的问题