2016-09-28 50 views
0

在毫米项目我想评估一个字符串的数学公式。例如:"((1*10)/100) + 100"如何评估数学公式包含字符串?

如何评估这样的公式?我使用了eval(),但它抛出了Parse error: syntax error, unexpected end of file错误,并且eval不是一个安全的使用功能。

无论如何,如果我能做到这一点?如果除了eval以外没有办法,那我该怎么做?为什么会抛出Parse error: syntax error, unexpected end of file错误?

+0

'EXEC()'允许执行命令,而不是计算数学方程的结果。这是完全不同的东西。该字符串不包含任何命令,因此没有有效的语法。 – arkascha

回答

0

php的exec()函数允许执行命令,而不是计算数学方程或公式的结果。这是完全不同的东西。该字符串不包含任何命令,所以它不是有效的语法。

相反,你需要养活一个有效命令到您的来电exec(),而不是一个数学公式:

看一看这个简单的例子:

<?php 
$input = '((1*10)/100) + 100'; 
echo exec('php -r "echo ' . $input . ';"'); 

这显然需要一个命令行如果您尝试从http服务器中触发该版本,则可以使用版本为php的php。但是使用任何其他可用的解释器也可以做到这一点,例如bash

“内联”替代方案(所以不用分流外部进程)是使用php的eval()函数。但是你需要再给它一个命令,而不是一个公式。优点是您不必依赖任何其他工具或解释器在运行时可用。相应的例子是:

<?php 
$input = '((1*10)/100) + 100'; 
echo eval('return ' . $input . ';'); 

这两个片段的输出显然是100.1

但请注意,两种方法都必须完全控制您输入执行的公式。做不是允许客户端输入通过这个未过滤!这将允许任何攻击者在您的系统上执行任意代码!

0

这将帮助你

echo eval('return '. "((1*10)/100) + 100" .';');