在mm项目中,我想评估一个字符串的数学公式。示例:"((1*10)/100) + 100"
。
如何评估这样的公式?我使用eval()
但是它会抛出Parse error: syntax error, unexpected end of file
错误而eval
不是一个安全的函数。
无论如何,如果我能做到这一点?如果除了eval之外没有其他方法那么我该怎么做呢?为什么抛出Parse error: syntax error, unexpected end of file
错误?
答案 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" .';');