ignore_repeated_errors = on 可忽略同一文件同一行的重复错误;需手动添加至php.ini错误处理区块,确保log_errors = on并重启服务,且cli与web配置需分别检查。

phpEnv里找不到 ignore_repeated_errors 配置项?
phpEnv 默认生成的 php.ini 文件中,ignore_repeated_errors 通常被注释掉,或者压根没写——它不是默认开启项,也不会出现在精简版配置里。你得手动加进去,而且必须加在「错误处理」相关区块(比如 [PHP] 或 [XDebug] 之后),否则 PHP 启动时会忽略该指令。
怎么正确启用 ignore_repeated_errors
打开 phpEnv 对应版本的 php.ini(路径类似 phpenv/php/{version}/etc/php.ini),找到或新增以下两行:
ignore_repeated_errors = On ignore_repeated_source = Off
注意两点:
-
ignore_repeated_errors = On表示:同一文件、同一行反复触发的错误(比如循环里file_get_contents('missing.txt')每次都报Warning),只记一次日志 -
ignore_repeated_source = Off是更安全的默认值;设为On会导致不同文件/不同行的相同错误(如多个控制器都调用同一个已废弃函数)也被合并,容易掩盖真实问题 - 改完必须重启 phpEnv 的 Web 服务(如 Apache/Nginx)或 CLI 进程,仅 reload 不生效
为什么开了 ignore_repeated_errors 还是看到重复日志
常见原因有三个:
- 错误实际来自不同行号:比如
foo.php第 12 行和第 15 行都抛出E_WARNING,即使内容一样,ignore_repeated_errors也管不了 —— 它只认「同一文件 + 同一行」 -
log_errors = Off:这个开关关了,再怎么配ignore_*都不会写日志,先确认它为On - CLI 和 Web SAPI 配置不一致:phpEnv 下 CLI 模式可能读的是另一份
php.ini(比如phpenv/php/{version}/bin/php.ini),要分别检查
线上环境要不要开 ignore_repeated_source
不建议开。虽然它能进一步减少日志量,但代价是丢失错误上下文:
- 假设
user.php、order.php、payment.php都因调用mysql_connect()报错,ignore_repeated_source = On会让它们全被压缩成一条日志,你无法判断是哪个模块出的问题 - 排查链路问题时,重复但分散的错误反而是线索;真正该做的是定位并修复源头(比如统一替换为 PDO)
- 如果日志量爆炸,优先查
error_reporting级别是否过于宽松(例如开着E_ALL | E_STRICT却没处理 NOTICE),而不是靠合并来掩盖
重复错误本身不是噪音,是系统在反复提醒你某处逻辑不稳定——配置只是辅助,不能替代问题定位。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











