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