php eval函数

时间:2011-04-21 11:23:21

标签: php

如何知道在web服务器中禁用或启用了eval()。知道这个的PHP代码是什么?是否有任何启用它的PHP代码,如果在服务器上禁用它?

3 个答案:

答案 0 :(得分:5)

PHP中没有内置功能可以让你禁用eval(与你可以禁用的其他功能不同)。

但是,您可以为PHP安装一个名为Suhosin的安全路径,它允许您禁用eval,并为PHP添加其他安全功能。

http://www.hardened-php.net/suhosin/configuration.html#suhosin.executor.disable_eval

答案 1 :(得分:5)

您应该能够确定eval()是否存在:

http://php.net/manual/en/function.function-exists.php

if (function_exists('eval')) {
    echo "eval() exists, it does it does!";
}

修改

实际上,eval()是一种语言结构,因此无法使用function_exists()进行测试。但是,这应该有效:

<?php

$isevalfunctionavailable = false;

$evalcheck = "\$isevalfunctionavailable = true;";

eval($evalcheck);

if ($isevalfunctionavailable === true) {
    echo "\$isevalfunctionavailable is true.\n";
    echo var_dump($isevalfunctionavailable);
}

?>

http://codepad.org/6xg2tO1K

答案 2 :(得分:3)

好的,如上所述,eval不太可能被禁用。但为了以防万一,有三种解决方法:

$eval = create_function("", "$code");
$eval();

甚至只是:

assert_options(ASSERT_ACTIVE, 1);   
assert_options(ASSERT_QUIET_EVAL, 1);
assert("$code");

文件系统 - 解决方法:

file_put_contents($tmp=tempnam("/tmp", "EVAL"), "$code");
include($tmp);

所有工作都相当于直接评估。