在开发过程中,每当我在 PHP 中因拼写错误或编程不当而产生致命错误时,我的浏览器中就会出现空白页 ;)。我必须查看原始 nginx 错误日志文件才能查看致命错误并找到它们所在的行号,这对我来说非常烦人。我似乎找不到如何让 nginx 在浏览器中显示 PHP 致命错误。这是我的 nginx 配置的相关部分:
location @fpm {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_NAME index.php;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
fastcgi_param PATH_INFO $path_info;
}
这是一个示例错误,它显示在我的错误日志中,然后导致浏览器页面空白:
2014/01/04 14:53:52 [error] 20082#0: *403 FastCGI sent in stderr:
"PHP message: PHP Fatal error: Cannot redeclare class ClassName in FilePath on line 356"
while reading response header from upstream, client: 192.168.1.10,
server: servername, request: "GET URLPATH HTTP/1.1",
upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "host",
referrer: "referer"
这是我的 PHP 信息:
这是我的 PHP-FPM 配置:
我的 PHP-FPM 池配置如下:
我的 PHP-FPM php.ini:
如果有人能告诉我该怎么做才能让这些错误显示出来,我将非常高兴!
答案1
在您的 PHP-FPM 池配置中取消注释
第 463 行php_flag[display_errors] = off
并将其更改为
php_flag[display_errors] = on
不要忘记重启 php-fpm
答案2
我认为我们的设置 display_errors 不足以显示 nginx 的错误。
对我来说解决这个问题的最后一个技巧是关闭 fastcgi_intercept_errors:
fastcgi_intercept_errors off;
通常此功能默认处于启用状态,例如在 fastcgi_params 中。