2012-07-29 53 views
0

我试图下载一个7GB的文件使用php-curl,但它似乎只会下载第一个2GB。绕过PHP CURL 2GB的下载限制

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

任何人有任何想法?

+0

不同的文件系统对文件大小有限制,http://en.wikipedia.org/wiki/Comparison_of_file_systems,哪一个是你的? – ajreal 2012-07-29 16:58:25

+0

centos 64bit,ext4 – 2012-07-29 17:16:41

+0

http://curl.haxx.se/mail/lib-2003-08/0145.html http://curl.haxx.se/mail/lib-2010-08/0054.html – ajreal 2012-07-30 16:51:10

回答

2

下面是关于该主题两个有用的链接:

Downloading a large file using curl

How to partially download a remote file with cURL?

基本上,你可以有两个问题在这里:

  • 您正在阅读到内存中第一次作为这样用尽PHP的内存分配
  • 你需要大块downloa d文件克服HTTP协议中的某些限制。

也有文件系统的限制和什么不检查您的文件系统类型,如@ajreal所述(即FAT32有4GB的限制,99%的机会你不使用FAT,但仍然是一个例子)。

由于OP发现了它是做与DB:

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

+0

I我正在PHP中使用内容配置,第一个链接如何使用它来回显字节而不是写入文件? – 2012-07-29 17:27:00

+0

@JakeCattrall而不是使用cURL opt文件,你可以像使用2GB的问题那样正常地获取内容,用这个文件缓慢(或快速)填充服务器内存,这可能是我没说的。 – Sammaye 2012-07-29 18:35:16

+0

CURLOPT_WRITEFUNCTION是否使用ram?即便如此,我拥有34GB内存,所以我并不担心这一点。我只需要以某种方式绕过这个限制... – 2012-07-29 19:22:54

0

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

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

还要确保您设置一个适当的期限(含set_time_limit(...))。