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
。
但请注意,两种方法都必须完全控制您输入执行的公式。做不是允许客户端输入通过这个未过滤!这将允许任何攻击者在您的系统上执行任意代码!
'EXEC()'允许执行命令,而不是计算数学方程的结果。这是完全不同的东西。该字符串不包含任何命令,因此没有有效的语法。 – arkascha