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

在 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. 重新启动 Apache

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

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

  5. 重新启动 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

标签: php apache lamp error-reporting error-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 文件夹中的文件

      【讨论】:

        猜你喜欢
        • 2020-10-23
        • 2016-08-03
        • 1970-01-01
        • 1970-01-01
        • 2021-11-01
        • 1970-01-01
        • 2018-06-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多