【发布时间】:2011-03-27 23:39:03
【问题描述】:
我正在使用 cURL 从远程服务器下载大型 XML 文件(介于 500MB 和 1GB 之间)。尽管该脚本适用于较小的测试文件,但每次我尝试下载大于几百兆字节的文件时,该脚本似乎都挂起 - 它没有退出,没有错误消息,它只是挂在那里。
我正在从命令行 (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 它启用进度条,因此您可以查看您是否仍在实际下载文件。