2013-10-15 42 views
-2

哪個PHP函數可以用來評估一個字符串,而不是eval()的PHP代碼?我不能使用eval()函數。哪個PHP函數用於評估字符串爲PHP代碼?

+0

好輸出,1)爲什麼*不能*您使用'eval'? (找到合理的,因爲它會啓發)2)什麼是*實際*問題? – user2864740

+0

*請不要那樣做*。代碼評估將導致在...中的利用率......也許幾納秒:)如果它被禁用(並且大多數PHP設置禁用它),那是有原因的。相反,請告訴我們您的編碼問題。你需要什麼'eval'? –

+0

我冒這個險。 @ user2864740我的虛擬主機不允許eval() – user2883525

回答

0

的任意代碼的動態執行不是很好的事,檢查出很好的答案在When is eval evil in php?

,但如果你要做到這一點,並採取安全考慮,這裏有幾種方法可以做到這一點:

    在文件
  1. eval
  2. ​​
  3. 放碼,並將其納入

第一和第二是作爲create_function使用eval幾乎是相同的,所以它們不是爲特定的情況下,最後一個是有點不同,你需要有寫入權限

+0

顯然,這三種方法並不相同,只有第一種方法適合OP的要求。 –

+0

@StefanoSanfilippo 1和2是等價的,第三名差不多,所以我沒有看到你的點 –

+0

我的虛擬主機不允許eval – user2883525

0

請注意,在這種執行代碼由於剝削原因,方式非常糟糕。

然而,而是採用eval(),你可以嘗試從你要eval代碼編寫的文件中使用output buffering

編輯:

寫入文件,需要/運行它,並保存其輸出爲一個變量。

$filename = 'randomlygeneratedfilename.php'; 
$handle = fopen($filename , 'w'); 
//$data is the PHP code 
fwrite($handle, $data); 
fclose($handle); 
ob_start(); 
require_once($filename); 
$output = ob_get_contents(); 
ob_end_clean(); 

$output現在將包含來自PHP代碼

unlink($filename);//Deleting the temp file containing the code 
+0

你能告訴我如何做dat嗎? – user2883525

+0

我剛剛編輯我的文章做這個 – PhilTrep

+0

它沒有,我在我的答案不清楚,但做任何事情是不好的做法,特別是在處理用戶輸入時,我編輯了我的答案,正確地說明了這一事實,感謝您指出出來。我的回答只是指出了一個可能的做法(儘可能不好),去做OP想要的事情。 – PhilTrep