2010-12-09 38 views
1

我試圖執行由cURL查詢返回的代碼。執行由cURL查詢返回的PHP代碼

下面的代碼查詢我的web服務器的頁面:

$ch = curl_init(); 
curl_setopt ($ch, CURLOPT_URL, "http://web.com/foo.php"); 
curl_setopt ($ch, CURLOPT_HEADER, 0); 
$res = curl_exec ($ch); 
curl_close ($ch); 
echo $res; 

我想只修改foo.php代碼這樣做。 我試圖用eval()命令返回foo.php中的PHP代碼,但它似乎不起作用。

任何想法?

編輯:夥計們,我沒有這樣做的公共網站。這是一個私人項目,我將是唯一的用戶。我知道這是一個巨大的安全問題,我永遠不會做這樣的事情,將在互聯網上生活。

+5

需要更多信息。 `eval` *是執行以字符串形式接收的代碼的方式,究竟「看起來不起作用」?另外:**不要這樣做**。 `eval`是`evil`,等等...... – deceze 2010-12-09 01:13:42

+3

好奇心破解了該網站:P – alex 2010-12-09 01:18:32

+1

如果有任何包含/必需的腳本,那麼這不會失敗嗎......引用數據庫,外部類......幾乎任何感興趣的東西? - 即使它確實有效,上帝也只知道現在正在服務器上運行的代碼中可能會有哪些內容! - 呃! – scunliffe 2010-12-09 01:31:25

回答

1

請注意,eval不需要領導<?php工作。 eval的替代方法是將代碼寫入文件,然後包含所述文件。

此外,請確保您將CURLOPT_RETURNTRANSFER選項設置爲true,否則,您可能只顯示代碼。

2

聲明:這是一個可怕的安全想法,你不應該這樣做。

也就是說

  • 確保allow_url_fopen選項在php.ini許可,或使用ini_set
  • 確保web.com真的返回PHP代碼,而不是執行的PHP設置代碼並返回輸出 - 這不會給你任何有用的運行(除非PHP代碼生成其他 php代碼作爲輸出,但是然後你真的變得太兔下洞了)
  • 然後只是include "http://web.com/foo.php"

現在,重申,除非你真的非常確定自己,或者你真的想讓你的網站被黑客攻擊,否則不要這樣做。

1

免責聲明:這是一個可怕的想法。我強烈建議您使用其他方法。

我會猜測你的服務器正在被它們所在的服務器解釋的文件子,所以你得到了PHP解析響應。嘗試將它們重命名爲.phtml之類的其他名稱。或者在遠程服務器上關閉PHP。然後,它應該只是事項:

$ch = curl_init(); 
curl_setopt ($ch, CURLOPT_URL, "http://web.com/foo.phtml"); 
curl_setopt ($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$res = curl_exec ($ch); 
curl_close ($ch); 

$parsed = eval($res); 

// echo or do whatever with $parsed 

但正如我在我的聲明說,大家都評論回答這個問題時說...這是一個securoty危險,甚至超出了各類陷阱的。如果你仔細研究了爲什麼你想這樣做,我們可能會找到一個更好的解決方案,不會讓Jon Skeet哭泣。