【问题标题】:PHP not logging script errors in spite of php.ini settings尽管有 php.ini 设置,PHP 没有记录脚本错误
【发布时间】:2017-02-15 12:17:30
【问题描述】:

我将 PHP-FPM 与 NGINX 一起使用,但我无法让错误日志与 PHP-FPM 一起正常工作。

这是我的php.ini,相关部分:

error_reporting = 'E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE'
error_log = /var/www/logs/php-scripts.error.log
log_errors = 'On'
display_errors = 'Off'
display_startup_errors = 'Off'
html_errors =  'Off'

open_basedir = /var/www/html/:/var/www/.tmp/:/var/www/logs/
upload_tmp_dir = /var/www/.tmp

www-pool.comf的相关片段(PHP-FPM主进程加载的配置):

listen = 9000
user = www-data
group = www-data
request_slowlog_timeout = 10
slowlog = /var/log/php-fpm/$pool.slow.log
chdir = /var/www/html
access.log = /var/log/php-fpm/$pool.access.log
catch_workers_output = Yes

/var/www/logs/ 可被www-data 写入 - 用户 PHP-FPM 和 Web 服务器正在运行。

现在如果我在index.php 中这样做:

error_log('Some error');

错误消息可以毫无问题地到达/var/www/logs/php-scripts.error.log。但是,当我尝试像这样触发错误时:

trigger_error('Some error', E_USER_WARNING);

错误未记录在日志文件中。此外,当我启动故意破坏的 PHP 脚本时,屏幕上出现 500 Internal Server Error,但 PHP 错误日志中没有记录任何内容,例如:

// index.php
<?php
echo 'Trigger error'

请注意上面缺少的; - 它应该在错误日志中报告错误,我只收到 500 Internal Server Error 而日志中没有输出。

你能帮忙吗?谢谢。

【问题讨论】:

    标签: php nginx fpm


    【解决方案1】:

    从 error_reporting 中删除引号,以及其他设置,您的 php.ini 应该如下所示:

    error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE
    error_log = /var/www/logs/php-scripts.error.log
    log_errors = On
    display_errors = Off
    display_startup_errors = Off
    html_errors =  Off
    
    open_basedir = /var/www/html/:/var/www/.tmp/:/var/www/logs/
    upload_tmp_dir = /var/www/.tmp
    

    【讨论】:

    • 就是这样。但是,作为参考,允许使用双引号,来自 docs:"; 您可以将字符串括在双引号中 include_path = ".:/usr/local/lib/php"" 谢谢
    • 是的,虽然这通常只用于文件路径或其他文本字符串。按照惯例,error_reporting 值和 On/Off 通常不带引号 :)
    猜你喜欢
    • 2018-01-24
    • 1970-01-01
    • 1970-01-01
    • 2013-05-08
    • 1970-01-01
    • 2019-11-13
    • 2015-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多