PHP 8.0.12 中 ignore_repeated_errors 存在已知 bug,会错误抑制所有后续错误(含 fatal error),非配置失效;该问题已确认并将修复。

PHP 8.0.12 中 ignore_repeated_errors 行为异常,不是配置没生效,而是该版本存在已知 bug:它会错误地抑制所有后续错误(包括不同类型的 fatal error),而不仅限于“重复错误”。所以你改了也没用——这是 PHP 自身的问题,不是 phpEnv 配置方式不对。
phpEnv 下修改 ignore_repeated_errors 的实际操作
phpEnv 是 Windows 下的 PHP 多版本管理工具,其配置本质仍是修改对应 PHP 版本的 php.ini。但要注意:修改后必须重启 Web 服务(如 Apache/Nginx)或 CLI 进程才生效。
- 找到当前启用的 PHP 版本目录,例如:
C:\phpEnv\php\php-8.0.12-Win32-vs16-x64\php.ini - 搜索
ignore_repeated_errors,将其设为Off(即ignore_repeated_errors = Off) - 同时确保
error_reporting足够高,比如error_reporting = E_ALL,否则即使不忽略,错误本身也不会被报告 - 保存后,在 phpEnv GUI 中点击“Restart Web Server”,或手动重启 Apache/Nginx
为什么 ignore_repeated_errors = Off 仍看不到多个错误?
因为 PHP 的执行模型是线性的:一旦发生 Fatal error(如 require(): Failed opening required 或未定义函数调用),PHP 解释器立即中止脚本,后续代码根本不执行——所以你根本等不到第二个错误被触发。
-
ignore_repeated_errors只影响“相同错误类型 + 相同文件 + 相同行号”的重复警告/通知,对 fatal error 无效 - 它不改变“脚本中断”行为,只决定是否把重复的 warning/notice 写进日志或显示出来
- 如果你看到的“只有一个错误”,大概率是第一个 fatal error 导致脚本终止,后面代码压根没跑
真正能暴露多个问题的调试组合
靠 ignore_repeated_errors 想一次性看到全部错误是走偏了。你应该用更底层、更可控的方式主动触发和捕获:
立即学习“PHP免费学习笔记(深入)”;
- 在入口脚本开头加
ini_set('display_errors', '1'); ini_set('error_reporting', E_ALL);,绕过 php.ini 缓存 - 用
set_error_handler()捕获所有非 fatal 错误,并在 handler 里trigger_error()强制抛出,避免静默丢弃 - 对关键加载点(如
require)加file_exists()+is_readable()预检,把 fatal error 转成可 catch 的逻辑判断 - 检查
log_errors = On和error_log路径是否可写——很多错误其实进了日志,只是你没看
别指望一个 ini 配置项解决多错误漏报问题。PHP 8.0.12 的 ignore_repeated_errors bug 是表象,根源在于你没区分“错误未报告”和“错误未发生”。后者才是多数人卡住的地方。



















