我正在使用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运行它。
谢谢,
马特
答案 0 :(得分:1)
文件在停止下载时似乎已完整?将-m 10800添加到命令将超时并在指定的秒数后结束传输。如果您将超时设置为比传输时间更长,这仍然有效,但仍然很烦人。
答案 1 :(得分:0)
检查此post,也许您可以尝试将文件下载为部分。或者,如果您可以访问远程服务器,则可以尝试存档文件然后下载。您也可以检查您的php.ini配置。请参阅文件大小,内存限制等。
答案 2 :(得分:0)
您正在保存的分区上可能没有磁盘空间, 或者为运行脚本的用户运行配额。