【问题标题】:Downloading large files with cURL?使用 cURL 下载大文件?
【发布时间】:2013-05-10 09:37:57
【问题描述】:

我对 cURL 还很陌生,我正在寻找一个好的脚本来使用 cURL 将远程文件下载到我的服务器。我发现是这样的:

<?php
    $url  = 'http://www.example.com/a-large-file.zip';
    $path = $_SERVER['DOCUMENT_ROOT'] . '/downloads/a-large-file.zip';

    $fp = fopen($path, 'w');

    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_FILE, $fp);

    $data = curl_exec($ch);

    curl_close($ch);
    fclose($fp);
?>

这个脚本是here,它在某种程度上有效。虽然在文章中说这段代码不存在 php 内存限制的问题,它只是下载了正好 8 MB 的文件,无论文件大小。

有谁知道这个限制来自哪里以及如何克服它?

【问题讨论】:

  • 下载文件没有限制,您的所有服务器都需要带宽和可用空间来存储文件。
  • @WaqarAlamgir,我认为这不是存储问题,因为我尝试下载了几个文件,但所有文件都停在 8 MB。至于带宽,服务器可以限制单个文件传输吗?如果是这样,那是有可能的。
  • 你能确定example.com/a-large-file.zip的文件不是8MB
  • @WaqarAlamgir,我测试脚本的文件之一是:mirror.cogentco.com/pub/mysql/MySQL-5.6/… (32 MB),我仍然得到 8 MB 的部分。

标签: php curl


【解决方案1】:

问题可能与超时有关吗? 尝试添加

curl_setopt($ch, CURLOPT_TIMEOUT, 300); // 其中 300 是秒数

【讨论】:

  • 我添加了该行,但仍然获得 8 MB 文件(即使将数字设置为例如 3000)。所以,我认为情况并非如此。
【解决方案2】:

尝试增加 php.ini 中的 memory_limit。 PHP 5.2.0 之前默认为 8M。

【讨论】:

  • 但我认为这个脚本是直接写入文件流而不是将其存储在内存中然后将其写入文件。从而解决了php的内存限制问题。
【解决方案3】:

尝试在脚本顶部使用它

set_time_limit(0);

【讨论】:

  • 这不会阻止脚本下载任何东西吗?
【解决方案4】:

我发现问题出在哪里:脚本运行良好,但这是服务器的限制。我没有注意他们的政策,该政策明确规定不允许上传大于 8 MB 的文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-06
    • 2016-05-02
    • 2012-09-03
    • 1970-01-01
    • 2019-03-05
    • 2012-06-15
    • 1970-01-01
    • 2019-10-02
    相关资源
    最近更新 更多