php - 下载大文件 (500MB+) 时 Curl 挂起

标签 php curl

我正在使用 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/

相关文章:

c++ - CentOS 6.6 上的 libcurl-devel 缺少函数定义

PHP - 从具有十六进制颜色的数组中获取最亮的十六进制颜色

php - 将列与不同的表链接

php - 如何将 PHP 照片上传/图像转换为 PHP 视频上传/视频?

javascript - 将 curl 查询转换为 jQuery.ajax()

python - 使用 curl 与 Python 请求

PHP 是最佳实践 array(...) 或 [...]

php - 使用唯一列更新表

python - 在 Python 脚本中执行 curl 命令

php - 为什么 curl_multi_select 和 curl_multi_info_read 相互矛盾?