在PHP 7中不鼓励使用Eval

时间:2016-11-14 06:44:03

标签: eval php-7

我在字符串敌人的例子中得到公式

$a = '1*2*(2+3)';
echo eval($a) // Output should be 10

现在我正在尝试评估此字符串并使用eval,但在php 7中给我这个错误不鼓励使用eval(),所以我该如何评估这个字符串。

3 个答案:

答案 0 :(得分:6)

PHP never raises any such error:您应该怀疑第三方是否干扰了安装,可能安装了某种以“安全”为重点的扩展来改变PHP的行为。

所有这些扩展都不受PHP项目的批准,并且非常糟糕。

尽管手册中有关于eval的内容,但在包含文件和评估某些代码之间存在no technical difference

现实世界中唯一的区别是eval'd代码可能包含用户输入:对于不使用eval的PHP应用程序,用户输入的清理和过滤是一个问题。

注意:您错过了评估表达式的返回

答案 1 :(得分:0)

manual说;

  

<强>注意

     

eval()语言结构非常危险,因为它允许   执行任意PHP代码。因此不鼓励使用它。如果你   仔细确认除了使用它之外别无选择   构建时,要特别注意不要传递任何用户提供的数据   没有事先正确验证它就进入它。

就替代方案而言,您可以尝试在线程中给出的解决方案:calculate math expression from a string using eval

答案 2 :(得分:0)

除非您在评估的代码中使用echo,否则无法在eval()上使用return

  

eval()返回NULL,除非在评估代码中调用return

请参阅:http://php.net/manual/en/function.eval.php

所以你可以这样做:

$a = 'echo 1*2*(2+3);';
eval($a);

$a = 'return 1*2*(2+3);';
echo eval($a);