【问题标题】:Bypass PHP CURL 2GB download limit绕过 PHP CURL 2GB 下载限制
【发布时间】:2012-07-29 16:53:10
【问题描述】:

我正在尝试使用 php-curl 下载一个 7GB 的文件,但它似乎只会下载前 2GB。

似乎没有任何文档或谈论这个。

有人有什么想法吗?

【问题讨论】:

标签: php linux curl centos


【解决方案1】:

这里有两个关于该主题的有用链接:

Downloading a large file using curl

How to partially download a remote file with cURL?

基本上你可能会遇到两个问题:

  • 您首先要读入内存,因此会耗尽 PHP 的内存分配
  • 您需要分块下载文件以克服 HTTP 协议中的某些限制。

还有文件系统限制,如@ajreal 所述,请检查您的文件系统类型(即 FAT32 的限制为 4GB,99% 的机会您不使用 FAT,但它仍然是一个示例)。

正如 OP 发现它与数据库有关:

原来是数据库问题。文件大小存储在 mysql 中 数据库,大小以字节为单位,“int”列的最大大小为 2147483648。将列类型更改为“bigint”解决了该问题。

【讨论】:

  • 我在 PHP 中使用内容处置,您的第一个链接如何使用它来回显字节而不是写入文件?
  • @JakeCattrall 而不是使用 cURL opt 文件,您只会正常获取 2GB 问题的内容,慢慢(或快速)用这个文件填充服务器内存,我可以说这是不明智的。
  • CURLOPT_WRITEFUNCTION 是否使用内存?即便如此,我有 34GB 内存,所以我并不担心。我只需要以某种方式绕过这个限制......
  • 原来是数据库问题。文件大小存储在 mysql 数据库中,大小以字节为单位,“int”列的最大大小为 2147483648。将列类型更改为“bigint”解决了该问题。
  • @JakeCattrall 刚刚注意到你回复了;之前回答过;啊哈感谢您跟进:),我会将其添加到答案中
【解决方案2】:

假设您的文件系统可以处理大于 2GB 的文件,您可以尝试使用 copy

copy("http:://example.org/your_file","/tmp/your_file");

还要确保设置适当的时间限制(使用set_time_limit(...))。

【讨论】:

    猜你喜欢
    • 2016-04-27
    • 1970-01-01
    • 1970-01-01
    • 2012-04-11
    • 2020-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    相关资源
    最近更新 更多