![Nginx + PHP7.0-fpm – PHP 错误 #500 进入状态代码标头并进入浏览器控制台。错误日志未写入](https://linux22.com/image/702219/Nginx%20%2B%20PHP7.0-fpm%20%E2%80%93%20PHP%20%E9%94%99%E8%AF%AF%20%23500%20%E8%BF%9B%E5%85%A5%E7%8A%B6%E6%80%81%E4%BB%A3%E7%A0%81%E6%A0%87%E5%A4%B4%E5%B9%B6%E8%BF%9B%E5%85%A5%E6%B5%8F%E8%A7%88%E5%99%A8%E6%8E%A7%E5%88%B6%E5%8F%B0%E3%80%82%E9%94%99%E8%AF%AF%E6%97%A5%E5%BF%97%E6%9C%AA%E5%86%99%E5%85%A5.png)
我使用的是 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