You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 04:53:21