phpinfo() 不直接显示 error_reporting 的级别名称,仅显示 Local Value(当前生效整数值)和 Master Value(php.ini 原始值);需结合 error_reporting() 函数与位运算反查常量组合,并通过 trigger_error 实际验证是否生效。

phpinfo() 不直接显示当前 error_reporting 的数值或级别名称,但能查到它的原始配置值;要准确判断错误等级是否生效,得结合 phpinfo 输出和实际运行验证。
phpinfo() 里怎么看 error_reporting 配置
在 phpinfo() 页面中搜索 error_reporting,你会看到两列关键信息:
-
Local Value:当前脚本生效的值(可能被ini_set()或.htaccess修改过) -
Master Value:php.ini 中原始设定值
注意:Local Value 显示的是整数(如 22527),不是 E_ALL & ~E_NOTICE 这类可读形式。PHP 8.0+ 默认值通常是 22527(即 E_ALL & ~E_DEPRECATED & ~E_STRICT)。
把整数 error_reporting 值转成可读的错误常量组合
光看数字很难判断覆盖了哪些错误类型。可以用这段代码快速反查:
立即学习“PHP免费学习笔记(深入)”;
echo error_reporting() . "\n";
var_dump(array_filter([
'E_ERROR' => E_ERROR,
'E_WARNING' => E_WARNING,
'E_PARSE' => E_PARSE,
'E_NOTICE' => E_NOTICE,
'E_CORE_ERROR' => E_CORE_ERROR,
'E_CORE_WARNING' => E_CORE_WARNING,
'E_COMPILE_ERROR' => E_COMPILE_ERROR,
'E_COMPILE_WARNING' => E_COMPILE_WARNING,
'E_USER_ERROR' => E_USER_ERROR,
'E_USER_WARNING' => E_USER_WARNING,
'E_USER_NOTICE' => E_USER_NOTICE,
'E_STRICT' => E_STRICT,
'E_RECOVERABLE_ERROR' => E_RECOVERABLE_ERROR,
'E_DEPRECATED' => E_DEPRECATED,
'E_USER_DEPRECATED' => E_USER_DEPRECATED,
], function($v) {
return error_reporting() & $v;
}));
运行后会列出当前启用的所有错误常量,比硬算位运算直观得多。
为什么 phpinfo() 看到的 Local Value 和实际报错不一致
常见原因有这几个:
- 脚本开头调用了
error_reporting(0)或ini_set('error_reporting', 0),导致phpinfo()显示的Local Value是0,但页面没报错——这其实是预期行为 - Web 服务器(如 Apache)用
php_admin_value error_reporting强制设为0,此时ini_set()无法覆盖,phpinfo()的Local Value仍显示0,但你不能靠error_reporting()函数改回来 -
display_errors = Off时,错误仍会记录到日志(error_log),但不会输出到页面,容易误以为“没报错”
真正要确认错误是否触发,得配合 trigger_error('test', E_USER_NOTICE) 手动触发并观察输出或日志。
修改 error_reporting 后不生效?优先检查这三处
改完配置却没反应,大概率卡在这几个地方:
- PHP 是 CGI/FPM 模式?改了
php.ini必须重启php-fpm进程,只 reload Nginx 不够 - 用了 Docker?确认挂载的
php.ini确实被容器内 PHP 加载(查phpinfo()底部的Loaded Configuration File路径) - 框架(如 Laravel、Symfony)在启动时主动调用
error_reporting(E_ALL)或类似逻辑,覆盖了 ini 设置
最稳妥的方式是:在目标脚本开头加一行 var_dump(error_reporting());,而不是只信 phpinfo() 里的静态快照。











