«

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

生产把错误直接回给用户会泄露路径、数据库结构等敏感信息,只写日志、不显示。

六、常见坑

  1. 改了 php.ini 没重启 FPM,以为没生效。
  2. 多个 php.ini(CLI 和 FPM 各一份),命令行和网页行为不一致。
  3. 致命错误发生在 ini_set 之前,页面依旧白屏,只能查 error_log。
  4. display_errors 开着但 error_reporting 把错误级别滤掉了,照样看不到。
  5. 日志目录不存在或 PHP 用户无写权限,log_errors 等于白开。
  6. 生产环境误开 display_errors,造成信息泄露。
  7. Nginx/FPM 层有自己的错误压制,页面显示和日志要分别确认。

总结

调试开 display_errors=On + error_reporting=E_ALL,生产关页面显示、只保留 log_errors。拿不到配置就用 ini_set 在脚本顶面临时开,致命错误永远以日志为准。改完一定重启服务再验证。

遇到问题加QQ23979811 协助处理

标签: PHP 报错排查 错误显示 php.ini display_errors