HTTP_GET_VARS从哪个PHP版本开始失效?是否为PHP 7.4?
关于$HTTP_GET_VARS的PHP版本支持情况说明
$HTTP_GET_VARS 并非 PHP 7.4 才停止支持,原生支持的正式移除版本是 PHP 5.4.0,完整的版本变更时间线如下:
- PHP 4.1.0:引入
$_GET、$_POST等超全局变量作为获取请求参数的官方方案,同时将$HTTP_GET_VARS这类长格式预定义变量标记为弃用,此时可通过php.ini配置中的register_long_arrays参数控制是否继续启用长数组变量 - PHP 5.3.0:
register_long_arrays配置项本身被标记为弃用,官方明确提示后续版本会移除该能力 - PHP 5.4.0:正式删除
register_long_arrays配置项,原生PHP环境中不再自动生成$HTTP_GET_VARS变量,直接调用该变量会触发未定义变量的报错
很多老旧项目在PHP 5.4+版本仍能正常使用
$HTTP_GET_VARS,通常是因为项目公共入口文件中提前做了兼容处理,比如添加了$HTTP_GET_VARS = &$_GET;这类全局赋值代码,或是之前使用的集成环境/托管平台默认内置了兼容逻辑。升级PHP 7.4后异常,大概率是升级过程中兼容代码丢失、或是新的PHP环境移除了额外的兼容逻辑导致。
修复方案
- 长期方案:全局批量替换代码中所有的
$HTTP_GET_VARS为$_GET,符合官方规范,不存在后续兼容风险 - 临时过渡方案:如果代码量太大暂时无法全量替换,可以在项目入口的公共初始化文件中添加一行兼容代码:
$HTTP_GET_VARS = &$_GET;
注意使用引用赋值=&可以保证两个变量后续修改时保持同步,避免逻辑异常。
内容的提问来源于stack exchange,提问作者Mister Woyng
相关产品推荐
相关产品推荐

