我使用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