Ограничения ZipArchive? PHP

У меня есть скрипт ZipArchive, используемый для функции «корзина загрузки» на моем сайте. Пользователи выбирают звук, который они хотели бы добавить в корзину, затем скрипт аутентифицирует пользователя, захватывает все защищенные файлы и добавляет их в zip-архив, готовый к загрузке.

После загрузки zip код удаляет файл. Все работает хорошо, однако у меня возникла проблема с большими файлами! Если пользователи хотят заархивировать дорожки общим объемом более 250 МБ, записываемый временный zip-файл никогда не станет больше 250 МБ — он просто перезаписывается и запускается снова.

Мои два вопроса тогда будут такими:

  1. Есть ли у ZipArchive ограничение на количество записываемых файлов?
  2. Есть ли в ZipArchive другой способ записи файлов для создания файлов большего размера?

Ценю твою помощь.


person Marc Bakos    schedule 08.03.2013    source источник


Ответы (1)


Предел ZIP-файла составляет 4 ГБ сжатого файла. Для большего размера 4 ГБ вам нужно разделить его отдельно.

Но это может зависеть от memory_limit(), если вы ZIP-архив на лету, он будет иметь меньшую емкость.

Есть ли в ZipArchive другой способ записи файлов для создания файлов большего размера?

Нет. Но вы можете разделить свой архиватор, если хотите, а затем объединиться для извлечения в виде строки.

person Marin Sagovac    schedule 08.03.2013
comment
Спасибо, что ответили мне, Марин. Мы имеем дело с несжатыми аудиофайлами WAV, и некоторые клиенты любят загружать «целые альбомы», так что в конечном итоге это займет около 1/2 ГБ на zip. У меня нет проблем с ограничением в 4 Гб. Я пытался использовать shell_exec(copy) для выполнения аналогичной задачи, однако файлы не копировались - очень неприятно. Могу ли я установить ограничение памяти в скрипте PHP? Ограничено ли это объемом оперативной памяти? - person Marc Bakos; 08.03.2013
comment
Попробуйте добавить ini_set('memory_limit', '-1'); внизу файла. Увеличьте память или разрешите загрузку через FTP анонимных учетных записей. - person Marin Sagovac; 09.03.2013