2016-09-28 144 views
0

在毫米項目我想評估一個字符串的數學公式。例如:"((1*10)/100) + 100"如何評估數學公式包含字符串?

如何評估這樣的公式?我使用了eval(),但它拋出了Parse error: syntax error, unexpected end of file錯誤,並且eval不是一個安全的使用功能。

無論如何,如果我能做到這一點?如果除了eval以外沒有辦法,那我該怎麼做?爲什麼會拋出Parse error: syntax error, unexpected end of file錯誤?

+0

'EXEC()'允許執行命令,而不是計算數學方程的結果。這是完全不同的東西。該字符串不包含任何命令,因此沒有有效的語法。 – arkascha

回答

0

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

但請注意,兩種方法都必須完全控制您輸入執行的公式。做不是允許客戶端輸入通過這個未過濾!這將允許任何攻擊者在您的系統上執行任意代碼!

0

這將幫助你

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