【问题标题】:Curl hangs when downloading large file (500MB+)下载大文件时 Curl 挂起 (500MB+)
【发布时间】: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 它启用进度条,因此您可以查看您是否仍在实际下载文件。

标签: php curl


【解决方案1】:

这些文件在停止下载时似乎是完整的,对吧?在命令中添加 -m 10800 将超时并在指定的秒数后结束传输。如果您将超时设置为长于传输所需的时间,这将起作用,但仍然很烦人。

【讨论】:

    【解决方案2】:

    查看post,也许您可​​以尝试将文件作为部分下载。或者,如果您可以访问远程服务器,您可以尝试存档文件然后下载它。你也可以检查你的 php.ini 配置。查看文件大小、内存限制等。

    【讨论】:

    • 谢谢,但是 RANGE 选项不适用于我从中下载的服务器(我无法控制)。在 PHP.ini 中也看不到任何不祥之物 - 有什么具体建议吗?
    • 为什么不直接从终端使用 curl,而不是从 php 脚本?
    【解决方案3】:

    您要保存的分区上的磁盘空间可能不足, 或者超出运行脚本的用户的配额。

    【讨论】:

      猜你喜欢
      • 2011-05-16
      • 2014-10-01
      • 2018-02-17
      • 2012-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多