Nginx + PHP7.0-fpm – PHP 错误 #500 进入状态代码标头并进入浏览器控制台。错误日志未写入

Nginx + PHP7.0-fpm – PHP 错误 #500 进入状态代码标头并进入浏览器控制台。错误日志未写入

我使用的是 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_errorsstderr

此链接了解更多信息。

答案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

相关内容