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


Can't get PHP errors to go to a log file (other than the Apache log)

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

这是我尝试/做的:

  1. 编辑了 php.ini 文件:

    • error_reporting = E_ALL |E_STRICT
    • display_error = 关闭
    • log_errors = 开
    • error_log =/var/log/php_errors.log
  2. 重新启动的阿帕奇

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

  4. 在验证错误仍然会进入 Apache 日志后,我实际创建了php_errors.log并重试。 仍然要去阿帕奇日志!

  5. 已重新启动网络服务器! 还。。。!

有人有解决方案吗?

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

这与所有权有关。 一个或另一个已经奏效[出于我不清楚的原因]:

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相反......同样出于我不清楚的原因]

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

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

转到下一个文件

/

etc/apparmor.d/abstractions

编辑此文件

阿帕奇2-常见

添加下一行

/var/log/php_errors.log rw,

其中 rw 表示进程可以读取和写入此文件

或者你也可以做:

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

最后,重新加载装甲的配置

systemctl reload  apparmor

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