我正在使用 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 运行它的。
谢谢,
马特
最佳答案
文件停止下载时似乎已完成,对吗?在命令中添加 -m 10800 将在指定的秒数后超时并结束传输。如果您将超时设置得比传输时间长,这将起作用,但仍然很烦人。
关于php - 下载大文件 (500MB+) 时 Curl 挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5453264/