我使用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運行它。
感謝,
馬特
嘗試將此選項設置爲false:CURLOPT_NOPROGRESS它啓用進度欄,以便您可以查看是否仍在實際下載文件。 – psion 2012-01-13 08:32:29