无法获取 PHP 错误以转到日志文件(Apache 日志除外)

Posted

技术标签:

【中文标题】无法获取 PHP 错误以转到日志文件(Apache 日志除外)【英文标题】:Can't get PHP errors to go to a log file (other than the Apache log) 【发布时间】:2013-09-11 03:56:34 【问题描述】:

在 Ubuntu Web 服务器 [LAMP] 上,我试图将 php 错误写入 php_error 文件,但无论我做什么,它们都会继续进入 apache 日志。

这是我尝试过/做过的事情:

    编辑了 php.ini 文件:

    error_reporting = E_ALL | E_STRICT display_error = 关闭 log_errors = 开启 error_log = /var/log/php_errors.log

    重新启动 Apache

    检查了phpinfo() 输出,以验证我对 php.ini 文件所做的更改是否已生效——确实如此。

    在确认错误仍然进入 Apache 日志后,我物理地创建了 php_errors.log 并再次尝试。还是去 Apache 日志!

    重新启动 Web 服务器!还是……!

有人有办法吗?

【问题讨论】:

检查log_errors_max_len是否大于0 Web服务器是否有权限创建/var/log/php_errors.log?您可能需要将其放置在 Apache 可以写入的位置中,例如 /var/log/httpd/php_errors.log/var/log/apache2/php_errors.log 【参考方案1】:

为了记录,Ubuntu 使用 AppArmor,它限制了 Apache 的功能。

此外,要更改文件的权限并编辑 php.ini 文件,您必须执行以下步骤:

转到下一个文件

/etc/apparmor.d/abstractions

编辑此文件

apache2-通用

添加下一行

/var/log/php_errors.log rw,

其中rw表示进程可以读写这个文件

或者你也可以这样做:

sudo nano /etc/apparmor.d/abstractions/apache2-common

最后,重新加载apparmor

的配置
systemctl reload  apparmor

注意:Centos/Redhat/Oracle Linux 使用 SELinux,步骤相同但配置不同。

【讨论】:

【参考方案2】:

这与所有权有关。一种或另一种有效[原因我不清楚]:

chown www-data:www-data /var/log/php_error.log

chown same-user-as-www-home:same-user-as-web-home /var/log/php_error.log

此外,以下内容也有所不同:

chmod 664 /var/log/php_error.log

[与 chmod 644 相对...再次出于我不清楚的原因]

【讨论】:

【参考方案3】:

检查/var/log 的目录权限。确保运行您的 Web 服务的用户对该文件夹具有写入权限。或者,创建一个子文件夹 (/var/log/phplogs?) 并为相关用户分配明确的权限,然后将 error_log 值更改为 that 文件夹中的文件

【讨论】:

以上是关于无法获取 PHP 错误以转到日志文件(Apache 日志除外)的主要内容,如果未能解决你的问题,请参考以下文章

简单的提交表单以转到页面

如何解决 XCode 滑动手势以转到上一个/下一个文件冻结编辑器?

如何在 PHP 中解析 A​​pache 的错误日志?

iOS崩溃:在键盘上敲击地球仪以转到表情符号键盘会导致崩溃

添加按钮以转到新视图并收到此错误 -[ViewController setData:]: unrecognized selector sent to instance 0x7f962ae90cf0

PHP 错误未记录在单独的日志文件中