2011-03-27 29 views
3

我使用cURL從遠程服務器下載大型XML文件(500MB到1GB之間)。雖然腳本對於較小的測試文件工作正常,但每次我嘗試下載大於幾百兆字節的文件時,腳本似乎都會掛起 - 它不會退出,沒有錯誤消息,只會掛在那裏。下載大文件時捲曲會掛起(500MB +)

我從命令行(CLI)執行腳本,所以PHP本身不應該超時。我也嘗試了cURL的詳細模式,但是除了初始連接之外,它沒有顯示任何內容。每次我下載文件時,它都會停止在正好是相同的大小(463.3MB)。該文件的XML在這一點上是不完整的。

任何想法非常讚賞。

 $ch = curl_init(); 
    $fh = fopen($filename, 'w'); 

    curl_setopt($ch,CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); 
    curl_setopt($ch, CURLOPT_FILE, $fh); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 0); 

    if(curl_exec($ch) === false) 
    { 
     echo 'Curl error: ' . curl_error($ch) . "\n"; 
    } 
    else 
    { 
     echo 'Operation completed without any errors'; 
    } 

    $response = array(
     'header' => curl_getinfo($ch) 
    ); 

    curl_close($ch); 
    fclose($fh); 

    if($response['header']['http_code'] == 200) { 
     echo "File downloaded and saved as " . $filename . "\n"; 
    } 

同樣,這個腳本工作正常較小的文件,但與大文件我嘗試下載它甚至沒有得到儘可能打印出一條錯誤消息。

這可能是別的東西(Linode上的Ubuntu 10.04)終止腳本?據我瞭解,我的網絡服務器在這裏應該不重要,因爲我通過CLI運行它。

感謝,

馬特

+0

嘗試將此選項設置爲false:CURLOPT_NOPROGRESS它啓用進度欄,以便您可以查看是否仍在實際下載文件。 – psion 2012-01-13 08:32:29

回答

0

檢查這個post,也許你可以嘗試下載文件的部分。或者,如果您有權訪問遠程服務器,則可嘗試歸檔文件,然後下載它。你也可以檢查你的php.ini配置。請參閱文件大小,內存限制和其他信息。

+0

感謝但範圍選項不適用於我從下載的服務器(我無法控制)。在PHP.ini中也看不到任何不祥之處 - 有什麼具體的建議? – Mateo 2011-03-28 00:06:17

+0

爲什麼不使用直接從終端curl,而不是從PHP腳本? – Faraona 2011-03-28 00:14:14

1

這些文件在停止下載時似乎完成了嗎?將-m 10800添加到命令將超時並在指定的秒數後結束傳輸。如果您將超時設置爲比傳輸所需的時間長,但這仍然有效,但仍然很煩人。

0

您可能正在保存的分區上的磁盤空間不足,或者運行在運行該腳本的用戶的配額之上。