PHP开启错误显示php.ini配置方法
时间:2026-11-15 07:42 作者:emer 分类: 无
页面白屏、只报 500 却看不到具体错误,是 PHP 新手最头疼的问题。生产环境默认把错误藏起来是对的,但本地和调试环境必须能看到报错,否则只能盲猜。通过 php.ini 和脚本内函数两层控制错误显示与记录,下面讲清每个参数怎么配。
一、先找到 php.ini 位置
php --ini
或在 PHP 文件里打印:
<?php phpinfo(); ?>
页面里 Loaded Configuration File 那行就是当前生效的配置,改别的文件不生效。
二、调试环境要改的四个参数
在 php.ini 里:
; 把错误输出到页面(调试开,生产关)
display_errors = On
display_startup_errors = On
; 报告所有错误,包括通知和弃用提示
error_reporting = E_ALL
; 错误同时写进日志,便于排查致命错误
log_errors = On
error_log = /var/log/php_errors.log
改完重启 PHP-FPM 或 web 服务才生效:
systemctl restart php-fpm
三、脚本内临时开启(不改配置)
有时拿不到 php.ini,可在页面最前面加:
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
注意:致命错误(如内存耗尽、语法错误)发生在这行之前就不会被页面显示,这种必须看错误日志。
四、error_reporting 常用级别
error_reporting(E_ALL); // 全部,调试用
error_reporting(E_ALL & ~E_NOTICE); // 忽略通知
error_reporting(E_ERROR | E_WARNING); // 只报错误和警告
五、生产环境务必关闭页面显示
display_errors = Off
log_errors = On
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
生产把错误直接回给用户会泄露路径、数据库结构等敏感信息,只写日志、不显示。
六、常见坑
- 改了 php.ini 没重启 FPM,以为没生效。
- 多个 php.ini(CLI 和 FPM 各一份),命令行和网页行为不一致。
- 致命错误发生在 ini_set 之前,页面依旧白屏,只能查 error_log。
- display_errors 开着但 error_reporting 把错误级别滤掉了,照样看不到。
- 日志目录不存在或 PHP 用户无写权限,log_errors 等于白开。
- 生产环境误开 display_errors,造成信息泄露。
- Nginx/FPM 层有自己的错误压制,页面显示和日志要分别确认。
总结
调试开 display_errors=On + error_reporting=E_ALL,生产关页面显示、只保留 log_errors。拿不到配置就用 ini_set 在脚本顶面临时开,致命错误永远以日志为准。改完一定重启服务再验证。
遇到问题加QQ23979811 协助处理
标签: PHP 报错排查 错误显示 php.ini display_errors