You need to enable JavaScript to run this app. PHP使用eval()获取字符串形式数组变量值不生效问题排查
优惠活动
大模型
产品
解决方案
定价
更多

PHP使用eval()获取字符串形式数组变量值不生效问题排查

问题成因
  • eval函数的使用逻辑错误:eval()执行的是PHP语句,你直接传入变量表达式$_COOKIE['key1']['key2']['key3'],不会返回该变量的值,只会执行这个表达式语句,默认返回null。因此你的函数最终返回的是null,echo null本身就没有任何输出。
  • 潜在附加问题:如果你是通过setcookie()方法设置的Cookie,当前请求的$_COOKIE超全局变量不会立即更新,$_COOKIE只会读取本次请求携带的Cookie值,setcookie()设置的内容需要等到下一次用户发起请求时才会被带到$_COOKIE中。如果你是直接在代码中手动给$_COOKIE赋值,这一点不存在问题。
解决方法

快速修复现有代码

只需要修改eval执行的语句,加上return关键字即可:

function getvar() { 
  $n = func_num_args(); 
  $l = func_get_args(); 
  $t = '$_COOKIE';
  for ($i = 0; $i < $n; $i++) { 
    $t .= "['".$l[$i]."']"; 
  }
  // 加上return和分号,让eval返回变量值
  return eval("return {$t};"); 
}

更安全的替代方案(完全避免使用eval)

eval存在极高的安全风险,如果传入的参数可控,会直接导致远程代码执行漏洞,同时原拼接方案遇到键名包含单引号的场景还会出现语法错误,建议使用遍历的方式实现相同功能:

function getvar(...$keys) {
    $value = $_COOKIE;
    foreach ($keys as $key) {
        if (!isset($value[$key])) {
            return null; // 层级不存在时返回null,避免报错
        }
        $value = $value[$key];
    }
    return $value;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 07:09:02