PHP7.4.33下track_errors弃用报错及日志无记录问题求助
问题成因与解决方法
成因
- PHP 7.4.x 版本中,
track_errors指令已被官方标记为废弃(Deprecated),只要在配置中开启该指令,PHP 启动阶段就会触发这条警告,这是语言版本的原生行为,和服务器环境无关。 - 新旧服务器同版本但表现不同,大概率是旧服务器的
track_errors实际处于关闭状态,或是旧环境的日志配置未捕获启动阶段的废弃警告(比如 IIS 日志过滤规则差异)。 - 关闭
track_errors后日志无记录,说明你的脚本/应用依赖该指令实现错误捕获——track_errors开启时会生成全局变量$php_errormsg存储错误信息,关闭后该变量失效,导致原本依赖它的错误日志逻辑无法正常输出内容。
解决方法
1. 替换依赖 track_errors 的代码逻辑(长期方案)
PHP 7.4 推荐使用 error_get_last() 函数替代 $php_errormsg,检查所有脚本并完成替换:
原依赖代码示例:
@fopen('invalid_file.txt', 'r'); // 使用 $php_errormsg 获取错误 echo $php_errormsg;
替换为:
@fopen('invalid_file.txt', 'r'); $last_error = error_get_last(); if ($last_error) { // 从返回数组中获取错误信息 echo $last_error['message']; }
完成替换后,保持 track_errors = Off,即可正常记录日志且无废弃警告。
2. 临时过滤废弃警告(过渡方案)
若暂时无法修改代码,可调整 php.ini 的错误报告规则,排除废弃类警告:
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
同时确保核心日志配置正确:
log_errors = On error_log = "D:/PHP/logs/php_errors.log" ; 替换为你的实际日志路径 track_errors = Off
重启 IIS 后,PHP 会正常记录非废弃类错误,不再输出那条重复的警告。
3. 检查 IIS PHP 管理器的配置覆盖
打开 IIS 中的 PHP 管理器,进入「PHP 设置」界面,确认 track_errors 选项是否被强制设置为 On——PHP 管理器的界面配置可能覆盖 php.ini 的设置,需统一调整为 Off,之后重启 IIS 生效。
内容的提问来源于stack exchange,提问作者Saghachi
相关产品推荐
相关产品推荐

