我使用的是 Nginx + php7.0-fpm。我的一些错误(500 代码)进入状态代码标头。例如,在浏览器控制台中,我看到这样的消息:
邮政https://example.com500 (DateTime::__construct(): 无法解析位置 11 处的时间字符串 (2017-04-09:) (:): 意外字符)
我尝试禁用错误报告,但display_errors = off
同样不起作用——错误进入标头,但从未记录下来。nginx 错误日志很清晰。但并非所有错误都是这样出现的——大多数错误都得到了正确处理。我已fastcgi_intercept_errors
在 中启用了该指令nginx.conf
。
当我切换回 php5 时,我没有看到这种行为。只有当我使用 php7.0 时才会出现问题。无法弄清楚如何让错误进入日志而不是浏览器控制台。
答案1
我不熟悉 PHP7,但是当nginx
通过 FastCGI 接口的 STDERR 通道收到消息时,它会将其写入其错误日志。
您应该检查 PHP 配置文件。通常将 PHP 错误记录到单独的日志文件中,但如果您必须发送这些错误消息,请nginx
尝试将变量更改display_errors
为stderr
。
看此链接了解更多信息。
答案2
检查您是否已在 php.ini 中设置了 error_log。您还可以在 .conf 文件中添加以下内容,因为 PHP7 有一些愚蠢的默认值
catch_workers_output = yes
php_flag[display_errors] = off
php_admin_value[error_log] = /var/log/fpm-php.www.log
php_admin_flag[log_errors] = on