Как быстро архивировать большие файлы в PHP - PullRequest
0 голосов
/ 20 июня 2010

Я написал PHP-скрипт для динамической упаковки файлов, выбранных клиентом, в zip-файл и принудительной загрузки. Он работает хорошо, за исключением того, что когда количество файлов огромно (например, более 50000), диалоговое окно загрузки на клиентской стороне занимает очень много времени.

Я думал об улучшении этого с помощью кеша (эти файлы меняются не очень часто), но поскольку выбор файлов полностью решается пользователем, а выбор состоит из десятков тысяч комбинаций, это очень сложно кешировать комбинации. Я также подумал о том, чтобы сначала создать zip-архивы для отдельных файлов, а затем объединить zip-файлы на лету. Но я не нашел способа объединить zip-файлы в PHP. Еще один способ, которым я могу придумать, - это отправка (то есть чтение) zip-файла одновременно с его генерацией. Я также не знаю, поддерживается ли это.

Если бы кто-то мог помочь мне в этом, я был бы очень признателен за вашу помощь.

Ответы [ 3 ]

2 голосов
/ 20 июня 2010

Чтобы расширить ответ Майка Шерова, попробуйте использовать комбинацию Tar и Gzip / Zip. Индивидуально предварительно сожмите все файлы, используя Gzip / Zip. Затем, когда клиент сделает их выбор, вы просто смонтируете эти файлы вместе. Таким образом, вы по-прежнему получаете преимущество сжатия и простоту загрузки одного файла, но никаких накладных расходов и задержек, связанных со сжатием больших файлов в режиме реального времени.

0 голосов
/ 30 мая 2011

Проверьте mod_zip для Nginx:

https://github.com/evanmiller/mod_zip

Он динамически передает ZIP-файл клиенту и может включать очень большие (более 2 ГБ) файлы при использовании очень небольшого объема ОЗУ.

0 голосов
/ 20 июня 2010

Хотя это и не серебряная пуля, вместо этого вы можете попробовать скопировать файлы. Полученный файл больше, но время сжатия намного короче. Смотрите здесь для получения дополнительной информации: http://birdhouse.org/blog/2010/03/08/zip-vs-tar-gzip/

...