PHP升级后each()函数废弃报错的解决方案咨询
解决方案:PHP升级后each()与magic_quotes废弃问题
一、each()函数废弃报错的修复
原报错代码(CategoryModify.php 第65行)
while (list($key) = each($AllowableHTML)) echo ' <' , $key , '>';
修复后的代码
foreach ($AllowableHTML as $key) { echo ' <' , $key , '>'; }
说明
each()函数在PHP 7.2及以上版本被正式废弃,改用foreach遍历数组是标准替代方案。这里原代码仅需要数组的键名,直接用foreach ($数组 as $键)即可实现完全等价的功能,且无需额外调用reset()(each()会移动数组指针,而foreach不会改变原数组的指针状态)。
二、magic_quotes相关废弃代码的修复
原代码问题分析
这段代码存在三个核心问题:
get_magic_quotes_gpc()、magic_quotes_runtime在PHP 5.4+已被移除/废弃$HTTP_GET_VARS、$HTTP_POST_VARS、$HTTP_COOKIE_VARS是过时的超全局变量,推荐使用$_GET、$_POST、$_COOKIE- 使用
each()遍历数组已被废弃
修复后的代码
// 移除已废弃的magic_quotes_runtime设置,PHP7.0+已不支持 // ini_set('magic_quotes_runtime', 0); // 定义递归添加反斜杠的函数,替代原嵌套each()逻辑 function add_slashes_recursive(&$value) { if (is_array($value)) { foreach ($value as &$item) { add_slashes_recursive($item); } unset($item); // 释放引用避免后续问题 } else { $value = addslashes($value); } } // 处理GET参数 if (is_array($_GET)) { add_slashes_recursive($_GET); } // 处理POST参数 if (is_array($_POST)) { add_slashes_recursive($_POST); } // 处理COOKIE参数 if (is_array($_COOKIE)) { add_slashes_recursive($_COOKIE); }
说明
- 移除
ini_set('magic_quotes_runtime', 0):该配置在PHP 7.0及以上版本已被移除,无需保留 - 替换过时变量:用
$_GET/$_POST/$_COOKIE替代$HTTP_*_VARS,这是PHP官方推荐的超全局变量用法 - 递归函数替代嵌套遍历:通过自定义递归函数
add_slashes_recursive处理多维数组,比原嵌套each()逻辑更简洁易维护,同时避免了废弃函数的使用 - 注意:
addslashes仅能简单转义特殊字符,若用于防SQL注入,更推荐使用预处理语句(PDO或mysqli_stmt),这是当前PHP安全规范的最佳实践
内容的提问来源于stack exchange,提问作者Bestbuildpc Net
相关产品推荐
相关产品推荐

