Ubuntu下PHP5.6-FPM错误无法在浏览器显示的问题求助
我之前也碰到过完全一样的情况——改了一堆配置,结果错误还是只藏在Nginx日志里,浏览器连个报错影子都看不到。给你几个亲测有效的排查和解决方向:
1. 先检查Nginx的站点配置,别让它拦截PHP错误输出
Nginx默认可能会把PHP的错误输出给吞掉,得确保你的站点配置里的PHP处理块有正确的参数设置。打开你的Nginx站点配置文件(一般在/etc/nginx/sites-available/或者/etc/nginx/conf.d/目录下),找到location ~ \.php$的块,确认里面有这行关键配置:
location ~ \.php$ { fastcgi_pass unix:/run/php/php5.6-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # 必须加上这行,强制让PHP在浏览器输出错误 fastcgi_param PHP_VALUE "display_errors=on"; include fastcgi_params; }
改完之后一定要重启Nginx生效:
sudo systemctl restart nginx
2. 确认PHP-FPM真的加载了你修改的配置,并且已经重启
很多时候我们改了配置但忘了重启服务,或者FPM加载的是其他路径的配置文件。先执行这个命令验证配置路径:
sudo php5.6-fpm -t
它会输出当前FPM加载的php.ini和池配置路径,确认是不是你修改的/etc/php/5.6/fpm/php.ini和/etc/php/5.6/fpm/pool.d/www.conf。然后务必重启PHP-FPM:
sudo systemctl restart php5.6-fpm
3. 排查脚本/框架是否手动关闭了错误显示
有些框架或者自定义脚本会在开头用代码强行关闭错误输出,比如error_reporting(0);或者ini_set('display_errors', 'off');。你可以写个极简的测试脚本,强制开启错误显示来验证:
<?php // 强制开启错误输出 error_reporting(E_ALL); ini_set('display_errors', '1'); // 故意写个错误代码测试 echo $undefined_variable; ?>
访问这个脚本,如果能看到错误,说明是你业务代码里的设置覆盖了全局配置。
4. 检查Nginx的错误页面配置是否隐藏了PHP错误
如果Nginx配置了error_page 500 502 503 504 /50x.html;,当PHP抛出致命错误时,Nginx会直接跳转到50x页面,而不是显示PHP的原始错误信息。可以临时注释掉这行配置,重启Nginx后再测试。
5. 确认PHP-FPM和Nginx的运行用户一致
如果PHP-FPM的运行用户(www.conf里的user和group)和Nginx的运行用户不一样,可能会因为权限问题导致错误输出被拦截。一般Nginx默认用www-data,那www.conf里也要设置:
user = www-data group = www-data
改完记得重启PHP-FPM。
内容的提问来源于stack exchange,提问作者Akhmed

