這讓我很煩惱。理論上它應該很容易,但我不是理論上的。從評估的PHP代碼返回字符串/ int?
基本上,我有一個選項來設置一個自定義的算法,使'代碼'是字符串或int。
這是用戶生成的,然後我打電話給他。
我已經嘗試使用此代碼來執行它:
$code = eval('return($custalg);');
但返回進入實際的算法,而不是它會產生價值。
所以我的問題是,我將如何設法執行$ custalg中的字符串作爲php,然後將結果保存到變量中?
這讓我很煩惱。理論上它應該很容易,但我不是理論上的。從評估的PHP代碼返回字符串/ int?
基本上,我有一個選項來設置一個自定義的算法,使'代碼'是字符串或int。
這是用戶生成的,然後我打電話給他。
我已經嘗試使用此代碼來執行它:
$code = eval('return($custalg);');
但返回進入實際的算法,而不是它會產生價值。
所以我的問題是,我將如何設法執行$ custalg中的字符串作爲php,然後將結果保存到變量中?
你可以得到一個呼應輸出,使用PHP output control functions:
ob_start();
eval("echo $custalg;");
$tmp = ob_get_contents();
ob_end_clean();
$evalOutput = $tmp;
,或者你只是返回的值賦給一個全局變量。
看起來你並沒有意識到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.
所以基本上正確的語法取決於$custalg
是什麼以及它在哪裏分配。在你的情況下,我猜你的$custalg
是在主代碼中分配的,所以你不需要替換。使用這樣的代碼,那麼:
$code = eval("return \$custalg;");
我沒有意識到有什麼不同。現在我得到這個錯誤:'解析錯誤:語法錯誤,意外';'在/pathtofile/login.php(119)中:eval()'d代碼(57):eval()'代碼在行1上。第二個eval的代碼是$ code = 1。 –
查看編輯答案 –
編輯答案產生與問題 –
沒有答案,但請*請*重新考慮您的設計。 'eval()'通常是非常糟糕的,但是用戶提供的代碼是一種不安分的破解。 – PeeHaa
@PeeHaa它的工作方式,這將在人們自己的服務器上;) –
曾聽說過責任?如果不是,我會建議你看看它? – PeeHaa