2012-04-05 31 views
0

我有這個代碼來下載文件,但在sourceforge.net服務器有一個5秒的文件開始下載之前的延遲(你可以看到它,如果你嘗試在瀏覽器中加載此鏈接)。腳本完成後,我的文件大小爲零。我怎樣才能下載這個文件?感謝提前!文件下載PHP腳本不起作用,因爲服務器延遲

$url = 'http://downloads.sourceforge.net/project/gnucash/gnucash%20%28stable%29/2.4.9/gnucash-2.4.9-setup.exe'; 
$ch = curl_init($url); 
$fp = fopen('/home/content/11/8564211/html/'.substr($url,strrpos($url,'/'),strlen($url)), 'w'); 
curl_setopt($ch, CURLOPT_FILE, $fp); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_exec($ch); 
curl_close($ch); 
fclose($fp); 
+0

可能頁面發送位置標題下載文件。嘗試使用curl_setopt($ ch,CURLOPT_FOLLOWLOCATION,1); – 2012-04-05 10:37:12

回答

0

你可以試試這個:

$url = 'http://downloads.sourceforge.net/project/gnucash/gnucash%20%28stable%29/2.4.9/gnucash-2.4.9-setup.exe'; 
$ch = curl_init($url); 
$fp = fopen('/home/content/11/8564211/html/'.substr($url,strrpos($url,'/'),strlen($url)), 'w'); 
curl_setopt($ch, CURLOPT_FILE, $fp); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_exec($ch); 
curl_close($ch); 
fclose($fp); 
0

爲了避免PHP超時可以用:

set_time_limit($hugetimeout); 
你的腳本之前

。您可以閱讀更多文檔here

+0

謝謝。但不起作用。 – artaskerov 2012-04-05 10:41:12

1

Sourceforge上使用元刷新標記來開始下載並因爲CURLOPT_FOLLOWLOCATION響應地點:頭它很可能不會幫助。

我想你將不得不做一些HTML解析來實現你想要做的事情。你必須找到這條線:

<meta http-equiv="refresh" content="5; url=http://downloads.sourceforge.net/project/gnucash/gnucash%20%28stable%29/2.4.9/gnucash-2.4.9-setup.exe?r=&amp;ts=1333621946&amp;use_mirror=switch"> 

然後,你必須從線和加載的URL。 Sourceforge可能會使用一些基於cookie或會話的塞子來進行這種下載,因此您可能必須對此進行補償。

我還沒有測試過這個,但它看起來像接近你必須做到這一點。

+0

謝謝。很有用! – artaskerov 2012-04-05 10:52:05

0

在下載頁面上有一個直接鏈接,你可以嘗試使用它嗎?