2012-12-29 26 views
0

我正在研究一些PHP代碼,這些代碼取決於發生在pastebin上的遠程文件。我正在使用的服務器已啓用所有必要的功能,因爲使用FILE_URL設置爲http://google.com運行它將返回預期結果。我還通過php.ini驗證了額外的措施。在pastebin URL上調用文件()失敗,但在本地文件或google.com上工作

全部應該工作,但它沒有。在形成的URL http://pastebin.com/raw.php?i=<paste id here>上調用file()將返回500服務器錯誤。在本地或google.com上託管的完全相同的文件上執行相同的操作會返回合理的結果。

我已驗證URL設置爲正確的值並驗證遠程頁面是我認爲它的位置。我很茫然。

ini_set("allow_url_fopen", true); 
// Prefer remote (up-to-date) file, fallback to local file 
if(ini_get("allow_url_fopen")){ 
    $file = file(FILE_URL); 
} 
if(!isset($file) || !$file) { 
    $file = file(LOCAL_FILE_PATH); 
} 
+2

很可能他們阻止了你,因爲你已經取消設置標題數據或者他們是一個重定向而你沒有被重定向。 –

回答

1

我不能對此進行測試,但你應該使用捲曲,嘗試這樣的事情:

<?php 
$url = "http://pastebin.com/2ZdFcEKh"; 
$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_exec($ch); 
+0

添加'CURLOPT_RETURNTRANSFER'和'pastebin.com'的原始代碼網址 –

+0

感謝幫助!有了@ shiplu.mokadd.im的貢獻,這個解決方案就像一個魅力。 – Dan

1

引擎收錄出現使用一個保護系統會自動阻止IP地址是發出請求這是「機器人般的」。

對於您的示例,由於file()命令從未完成(因爲它們的保護系統從未關閉連接)並且在您的調用中沒有超時功能,所以將出現500服務器錯誤。由於file()沒有通過典型瀏覽器的所有標準HTTP頭文件,因此該腳本可能被認爲是「類似於機器人」。

爲了解決這個問題,我建議您調查cURL,或者查看setting a browser user agent作爲準許訪問您的腳本的起點。我還應該提到,調查這是否違反了Pastebin用戶協議是符合您的利益的。雖然我在their FAQ(截至2012年12月29日)看不到有關使用腳本的任何參考,但由於某種原因,他們已經安裝了針對腳本的保護。

+0

感謝您的信息!做了一些閱讀,他們確實有一個公開的API,但它只包含發佈/編輯粘貼。我從中假設,粘貼的讀取留給程序員弄清楚。 – Dan

+1

非常歡迎。我認爲禁止方面是由他們的保護服務覆蓋的,我相信它被稱爲ProxyShield。這是一個位於服務器前面的層,可以保護它們免受各種DoS情況的影響。我試圖查找有關ProxyShield服務的信息,但沒有發現任何實質性信息。 – plasmid87

相關問題