2012-10-20 77 views
0

這讓我很煩惱。理論上它應該很容易,但我不是理論上的。從評估的PHP代碼返回字符串/ int?

基本上,我有一個選項來設置一個自定義的算法,使'代碼'是字符串或int。

這是用戶生成的,然後我打電話給他。

我已經嘗試使用此代碼來執行它:

$code = eval('return($custalg);'); 

但返回進入實際的算法,而不是它會產生價值。

所以我的問題是,我將如何設法執行$ custalg中的字符串作爲php,然後將結果保存到變量中?

+3

沒有答案,但請*請*重新考慮您的設計。 'eval()'通常是非常糟糕的,但是用戶提供的代碼是一種不安分的破解。 – PeeHaa

+0

@PeeHaa它的工作方式,這將在人們自己的服務器上;) –

+3

曾聽說過責任?如果不是,我會建議你看看它? – PeeHaa

回答

1

你可以得到一個呼應輸出,使用PHP output control functions

ob_start(); 
eval("echo $custalg;"); 
$tmp = ob_get_contents(); 
ob_end_clean(); 
$evalOutput = $tmp; 

,或者你只是返回的值賦給一個全局變量。

+0

這與問題 –

+0

@liamwli中描述的完全相同問題是的,你是對的,我已經更新了答案... – feeela

+0

謝謝!這工作完美:) –

4

看起來你並沒有意識到PHP中單引號'和雙引號"字符串之間的區別。您應該使用:

$code = eval("return($custalg);"); 

,如果你想$custalog進行擴展:

The most important feature of double-quoted strings is the fact that variable names will be expanded. See string parsing for details.

See more in docs

所以基本上正確的語法取決於$custalg是什麼以及它在哪裏分配。在你的情況下,我猜你的$custalg是在主代碼中分配的,所以你不需要替換。使用這樣的代碼,那麼:

$code = eval("return \$custalg;"); 
+0

我沒有意識到有什麼不同。現在我得到這個錯誤:'解析錯誤:語法錯誤,意外';'在/pathtofile/login.php(119)中:eval()'d代碼(57):eval()'代碼在行1上。第二個eval的代碼是$ code = 1。 –

+1

查看編輯答案 –

+0

編輯答案產生與問題 –