如何计算由字符串组成的数学公式


How to evaluate mathematical formula consist of string?

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

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

无论如何,如果我可以这样做吗?如果除了eval没有别的方法,那我该怎么做呢?为什么会抛出Parse error: syntax error, unexpected end of file错误?

这将帮助你

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

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

相反,您需要在exec()调用中提供有效的命令,而不是数学公式:

看这个简单的例子:

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

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

一个"内联"的选择(所以没有分支外部进程)是使用php的eval()函数。但是你需要给它一个命令,而不是一个公式。其优点是,您不必依赖任何其他工具或解释器来在运行时可用。相应的示例如下:

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

两个片段的输出显然是100.1

但是请注意,对于这两种方法来说,完全控制输入到执行中的公式是至关重要的。不要让允许客户端输入未经过滤地传递到此!这将允许任何攻击者在您的系统上执行任意代码!