PHP:使用 eval() 从数组变量(字符串)获取值无效
PHP: get value from array variable (which is a string) using eval() not working
我有这样的功能:
function getvar() {
$n = func_num_args();
$l = func_get_args();
$t = '$_COOKIE';
for ($i = 0; $i < $n; $i++) {
$t .= "['".$l[$i]."']";
}
// $t would be like $_COOKIE['arg1']['arg2']['arg3']
return eval($t);
}
我也有 cookie 在 24 小时后过期:
$_COOKIE['key1']['key2']['key3'] = 'TEST';
然后我调用 getvar() 使用:
$test = getvar('key1', 'key2', 'key3');
echo $test; //result should be 'TEST'
结果什么也没有。
使用array_reduce()
$_COOKIE = ['key1' => [ 'key2' => [ 'key3' => 'TEST' ]]];
function getvar(...$args)
{
return array_reduce($args, fn ($a, $k) => $a[$k], $_COOKIE);
}
print_r(getvar('key1', 'key2', 'key3'));
问题已解决。
我改
return eval($t);
至
return eval('echo ' . $t . ';');
现在它按预期工作了。
我有这样的功能:
function getvar() {
$n = func_num_args();
$l = func_get_args();
$t = '$_COOKIE';
for ($i = 0; $i < $n; $i++) {
$t .= "['".$l[$i]."']";
}
// $t would be like $_COOKIE['arg1']['arg2']['arg3']
return eval($t);
}
我也有 cookie 在 24 小时后过期:
$_COOKIE['key1']['key2']['key3'] = 'TEST';
然后我调用 getvar() 使用:
$test = getvar('key1', 'key2', 'key3');
echo $test; //result should be 'TEST'
结果什么也没有。
使用array_reduce()
$_COOKIE = ['key1' => [ 'key2' => [ 'key3' => 'TEST' ]]];
function getvar(...$args)
{
return array_reduce($args, fn ($a, $k) => $a[$k], $_COOKIE);
}
print_r(getvar('key1', 'key2', 'key3'));
问题已解决。
我改
return eval($t);
至
return eval('echo ' . $t . ';');
现在它按预期工作了。