php 7.4+ 已移除 get_magic_quotes_gpc(),应改用 ini_get('magic_quotes_gpc') 判断,注意返回字符串需转换为布尔值,且 php ≥5.4 后该功能默认关闭,可直接跳过 stripslashes()。

PHP 7.4+ 中 get_magic_quotes_gpc() 已被移除,不能继续调用
这个报错不是代码写错了,而是 PHP 自身行为变更:从 7.4 开始该函数被标记为 deprecated,到 8.0 版本已彻底删除。任何直接调用 get_magic_quotes_gpc() 的地方都会触发警告或致命错误(取决于错误报告级别)。你看到的「Deprecated」提示,说明当前运行在 7.4 或 7.5 等过渡版本上,再升级到 8.x 就会直接报 Fatal error: Uncaught Error: Call to undefined function get_magic_quotes_gpc()。
用 ini_get('magic_quotes_gpc') 替代是兼容性最稳的做法
PHP 官方推荐的等效替代就是读取配置项本身。注意两点:一是返回值是字符串(如 "1"、"on"、"Off"),不是布尔;二是该配置在 PHP 5.4+ 默认就是 off,且从 5.4 起已被废弃(只是函数留着没删),所以实际判断逻辑要兜底。
-
ini_get('magic_quotes_gpc')返回非空且不等于"off"(忽略大小写)时,视为启用 - 更稳妥写法:
$magic_quotes_gpc = filter_var(ini_get('magic_quotes_gpc'), FILTER_VALIDATE_BOOLEAN) === true; - 如果项目里只用它来决定是否执行
stripslashes(),那可以直接跳过判断——因为 PHP ≥5.4 后该功能默认关闭,所有输入数据都未经自动转义,stripslashes()反而可能误删用户原本想保留的反斜杠
帝国CMS 类老系统必须改三处关键位置
典型报错路径如 /e/class/connect.php 或 /e/class/phpfun.php,里面常有类似 if(get_magic_quotes_gpc()){...} 的判断。光加兼容函数不够,容易漏掉嵌套调用或条件分支。
- 在文件顶部(
<?php后第一行)加上:if (!function_exists('get_magic_quotes_gpc')) { function get_magic_quotes_gpc() { return false; } } - 搜索整个项目,把所有
get_magic_quotes_gpc()调用替换成ini_get('magic_quotes_gpc') !== 'off'或直接删掉整段判断逻辑(更推荐) - 检查
$_POST/$_GET是否被重复stripslashes_deep()——老代码常在入口和类方法里各做一次,导致数据被误处理两次
别回退 PHP 版本,真正的坑在自动转义残留逻辑里
有人用 phpEnv 切换回 PHP 5.6 或 7.2 来“绕过”报错,这只会掩盖问题。magic_quotes_gpc 的设计本就是反模式:它让开发者无法确定输入数据是否已被转义,导致到处补 stripslashes(),又怕补多、怕补少。现在 PHP 已统一要求「输入即原始,输出即过滤」,所以真正要清理的是那些冗余的自动清理逻辑。
比如这段常见错误代码:
if (get_magic_quotes_gpc()) {
$_POST = stripslashes_deep($_POST);
}
// → 在 PHP 7.4+ 下,上面 if 永远不执行,但下面的 stripslashes_deep() 还在运行,把用户合法输入里的 \ 干掉了
这类隐性破坏比报错更危险——它不报错,但悄悄改了数据。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











