2009-10-22 90 views
4

我正在使用PHP從遠程服務器訪問文件和照片。我主要使用file_get_contents()和copy()函數。在PHP中從遠程服務器檢索文件時處理延遲

有時訪問一個小文本文件或照片幾乎是即時的,但有時它似乎在同一個確切的文件上「卡住」一分鐘。有時它實際上會導致我的腳本掛起,甚至當我停止腳本時,Apache仍然被鎖定幾分鐘。

我非常願意接受互聯網連接可以是片狀的事實。我的擔心是我恢復正常,並且我沒有崩潰Apache - PHP set_time_limit()函數只返回致命錯誤。另外,在PHP手冊中還有一個提示:在流操作上花費的時間不會影響腳本的運行時間。

如何從這種連接問題中恢復並允許我的腳本繼續?爲什麼這會導致Apache掛起?

感謝布

回答

3
$options = array('http' => array(
     'user_agent' => 'Firefox wannabe', 
     'max_redirects' => 1, 
     'timeout'  => 10, 
)); 
$context = stream_context_create($options); 
$content = file_get_contents($url, false, $context); 

看看stream_context_createHTTP Context Options。上面的代碼會在連接上設置一個超時時間,並允許一次重定向。

這應該防止達到超時。

長時間延遲可能是由網絡或遠程服務器造成的,防火牆拒絕您一次抓取太多文件,或者通過遠程主機路徑上的碎片DNS服務器或路由器。作爲一個建議,你應該在本地緩存下載的文件,所以下一個刷新文件將在本地處理,而不是大網。

+0

令人驚歎。非常感謝。 – Brian 2009-10-22 16:53:12