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

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相关废弃代码的修复

原代码问题分析

这段代码存在三个核心问题:

  1. get_magic_quotes_gpc()、magic_quotes_runtime在PHP 5.4+已被移除/废弃
  2. $HTTP_GET_VARS、$HTTP_POST_VARS、$HTTP_COOKIE_VARS是过时的超全局变量,推荐使用$_GET、$_POST、$_COOKIE
  3. 使用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);
}

说明

  1. 移除ini_set('magic_quotes_runtime', 0):该配置在PHP 7.0及以上版本已被移除,无需保留
  2. 替换过时变量:用$_GET/$_POST/$_COOKIE替代$HTTP_*_VARS,这是PHP官方推荐的超全局变量用法
  3. 递归函数替代嵌套遍历:通过自定义递归函数add_slashes_recursive处理多维数组,比原嵌套each()逻辑更简洁易维护,同时避免了废弃函数的使用
  4. 注意:addslashes仅能简单转义特殊字符,若用于防SQL注入,更推荐使用预处理语句(PDO或mysqli_stmt),这是当前PHP安全规范的最佳实践

内容的提问来源于stack exchange,提问作者Bestbuildpc Net

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 22:35:18