Обойти ограничение загрузки PHP CURL в 2 ГБ

Я пытаюсь загрузить файл размером 7 ГБ с помощью php-curl, однако кажется, что он загрузит только первые 2 ГБ.

Кажется, нет никаких документов или разговоров об этом.

У кого-нибудь есть идеи?


person Jake Cattrall    schedule 29.07.2012    source источник
comment
другая файловая система имеет ограничение на размер файла, en.wikipedia.org/wiki/Comparison_of_file_systems , который твой?   -  person ajreal    schedule 29.07.2012
comment


Ответы (2)


Вот две полезные ссылки по теме:

Загрузка большого файла с помощью curl

Как частично загрузить удаленный файл с помощью cURL?

В основном у вас могут быть две проблемы:

  • Вы сначала читаете в память, так как это исчерпало выделение памяти PHP
  • Вам нужно разбить файл на части, чтобы преодолеть определенные ограничения в протоколе HTTP.

Существуют также ограничения файловой системы, а что не так, проверьте тип вашей файловой системы, как указано @ajreal (например, FAT32 имеет ограничение в 4 ГБ, вероятность 99%, что вы не используете FAT, но все же это пример).

Как выяснил ОП, это было сделано с БД:

Выяснилось, что проблема в базе данных. Размеры файлов хранились в базе данных mysql, размеры были указаны в байтах, а максимальный размер столбца «int» — 2 147483648. Изменение типа столбца на «bigint» устранило проблему.

person Sammaye    schedule 29.07.2012
comment
Я использую расположение контента в PHP, с вашей первой ссылкой, как я могу использовать это для вывода байтов вместо записи в файл? - person Jake Cattrall; 29.07.2012
comment
@JakeCattrall Вместо использования файла cURL opt вы просто получите содержимое как обычно с проблемой 2 ГБ, медленно (или быстро) заполняя память сервера этим файлом, что, могу я сказать, не рекомендуется. - person Sammaye; 29.07.2012
comment
Использует ли CURLOPT_WRITEFUNCTION оперативную память? Тем не менее, у меня 34 ГБ оперативной памяти, поэтому я не очень беспокоюсь об этом. Мне просто нужно как-то обойти этот лимит... - person Jake Cattrall; 29.07.2012
comment
Выяснилось, что проблема в базе данных. Размеры файлов хранились в базе данных mysql, размеры были указаны в байтах, а максимальный размер столбца int — 2147483648. Изменение типа столбца на bigint устранило проблему. - person Jake Cattrall; 31.07.2012
comment
@JakeCattrall Только что заметил, что вы ответили ранее; ага, спасибо за продолжение :), я добавлю это к ответу - person Sammaye; 31.07.2012

Предполагая, что ваша файловая система может обрабатывать файлы размером более 2 ГБ, вы можете попробовать использовать copy

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

Также убедитесь, что вы установили соответствующий лимит времени (с помощью set_time_limit(...)).

person Vatev    schedule 29.07.2012