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

移除Impress Pages CMS中已弃用的get_magic_quotes_gpc()函数求助

替代Impress Pages CMS中弃用的get_magic_quotes_gpc()方案

核心问题分析

原代码存在两个弃用点:get_magic_quotes_gpc()(PHP 5.4+移除)和each()(PHP 7.2+弃用),直接删除或仅替换其中一个都会导致逻辑断裂,引发页面空白或错误。需要同时修复这两个问题,并保留变量转义处理逻辑。

可行替代实现

将原fixMagicQuotes()函数替换为以下代码:

public function fixMagicQuotes()
{
    // 判断magic_quotes_gpc是否开启(兼容新老PHP版本)
    $magicQuotesEnabled = false;
    if (function_exists('get_magic_quotes_gpc')) {
        $magicQuotesEnabled = get_magic_quotes_gpc();
    }

    if (!$magicQuotesEnabled) {
        return;
    }

    // 替换弃用的each()为foreach,处理全局变量的反斜杠
    $process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
    foreach ($process as &$collection) {
        foreach ($collection as $k => $v) {
            unset($collection[$k]);
            $strippedKey = stripslashes($k);
            if (is_array($v)) {
                $collection[$strippedKey] = $this->stripSlashesRecursive($v);
            } else {
                $collection[$strippedKey] = stripslashes($v);
            }
        }
    }
    unset($process);
}

// 新增递归处理嵌套数组的私有方法
private function stripSlashesRecursive($value)
{
    if (is_array($value)) {
        $processed = [];
        foreach ($value as $k => $v) {
            $strippedKey = stripslashes($k);
            $processed[$strippedKey] = $this->stripSlashesRecursive($v);
        }
        return $processed;
    } else {
        return stripslashes($value);
    }
}

关键修改说明

  • 兼容magic_quotes_gpc判断:通过function_exists()检测该弃用函数是否存在,避免在高版本PHP中直接调用报错。
  • 替换each()循环:用foreach替代已弃用的each(),同时新增递归方法处理嵌套数组,确保所有层级的键和值都能正确去除反斜杠。
  • 保留原逻辑核心:维持对$_GET/$_POST/$_COOKIE/$_REQUEST的转义处理,避免CMS依赖这些变量的模块出现错误。

极端环境适配(仅PHP 5.4+)

如果你的服务器确定使用PHP 5.4及以上版本(magic_quotes_gpc永久关闭),可以进一步简化代码,直接跳过判断逻辑,但保留转义处理(防止手动添加的反斜杠导致问题):

public function fixMagicQuotes()
{
    $process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
    foreach ($process as &$collection) {
        foreach ($collection as $k => $v) {
            unset($collection[$k]);
            $strippedKey = stripslashes($k);
            if (is_array($v)) {
                $collection[$strippedKey] = $this->stripSlashesRecursive($v);
            } else {
                $collection[$strippedKey] = stripslashes($v);
            }
        }
    }
    unset($process);
}

private function stripSlashesRecursive($value)
{
    if (is_array($value)) {
        $processed = [];
        foreach ($value as $k => $v) {
            $strippedKey = stripslashes($k);
            $processed[$strippedKey] = $this->stripSlashesRecursive($v);
        }
        return $processed;
    } else {
        return stripslashes($value);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 22:22:46