Упакувати папку на сервері за допомогою php і ziparchive - все про web розробці на

Коли потрібно швидко викачати вихідні коди сайту з сервера, навіть відносно швидкий SSH тунель не дає потрібної швидкості. І чекати доводиться дуже і дуже довго. А ще багато хостинг провайдери не надають цього доступу, а змушують задовольнятися FTP, який в рази повільніше.

Особисто для себе я визначив вихід. На сервер закачується невеликий скрипт і запускається. Через деякий час отримуємо архів з усіма кодами. А один файл, навіть по древньому FTP гойдається набагато швидше ніж сотня маленьких.

Раніше на сторінках цього блогу вже згадувалася бібліотека zipArchive. Однак, тоді мова йшла про розпакуванні архіву.

Для початку, нам буде потрібно дізнатися, чи є на сервері підтримка zipArchive. Це популярна бібліотека встановлена ​​на переважній кількості хостингів.

Бібліотека жорстко обмежена параметрами php і сервера. Величезні бази і банки фотографій заархівувати не вийде. Навіть бази старої доброї програми 1С для бухгалтерії. Здавалося б в них повинні бути лише текстові дані. Але немає.

Раджу використовувати бібліотеку, лише при архівації відносно невеликих сайтів, з величезним числом дрібних файлів.

Перевіримо чи доступна робота з бібліотекою

Якщо все добре, скрипт продовжить своє виконання далі.

Невеликий оффтоп, для таких перевірок. Перевірки варто робити саме так, уникаючи великих конструкцій з вкладеними дужками. Так код буде більш атомарним, і легко піддаватиметься налагодженні. Порівняйте

Код приємніше і не розростається на величезні вкладені конструкції.

Вибачте за оффтоп, але хотілося поділиться цією знахідкою.

Тепер створимо об'єкт і архів.

де $ destination - це повний шлях до архіву. Якщо архів уже створений, то файли будуть в нього дозапісиваться.

Додавання файлу працює схожим чином, але потрібно спершу прочитати його в рядок.

В кінці треба закрити архів.

Як пробігти всі файли і піддиректорії в папці, думаю пояснювати не треба. Погуглити, щось на зразок Рекурсивний обхід папок на php

Мені підійшов такий варіант