如何评价数学公式由字符串组成?

时间:2016-09-28 10:14:43

标签: php math eval mathematical-optimization

在mm项目中,我想评估一个字符串的数学公式。示例:"((1*10)/100) + 100"

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

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

2 个答案:

答案 0 :(得分:0)

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

相反,您需要将有效的命令输入到exec()的调用中,而不是数学公式:

看看这个简单的例子:

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

这显然要求命令行版本的php可用作php,以防您尝试从http服务器中触发该版本。但是使用任何其他可用的解释器也可以做到同样的事情,例如bash

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

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

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

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

答案 1 :(得分:0)

这会对你有所帮助

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