1. Из браузера по AJAX запрашиваем список файлов требуемых для упаковки. В это время на сервере его подготавливаем и устанавливаем признак начала процесса (симофор, например: lock файл, который будут обязаны проверять другие скрипты, чтоб не изменять структуру каталогов и файлов, и что бы не запускался процесс архивирования повторно, пока есть работающий процесс).
2. Если с сервера прийдёт сообщение, что процесс запущен, выводим в браузере сообщение.
3. Если получили список файлов, то перебираем список и по AJAX поочерёдно отправляем запрос на добавления файла в архив, при этом можно выводить прогресс в браузере (сколько упаковано, сколько осталось, что сейчас упаковываем).
4. Когда перебрали все файлы, то посылаем AJAX запрос и говорим серверу, что закончили, на сервере снимаем симофор, и посылаем в ответ url на скачивание архива (если необходимо).
Только может возникнуть проблема, когда страницу в браузере закрыли, тогда симофор не снимется и повторно скрипт не заработает, для решения, можно проверять когда он был установлен и по истечении некого времени игнорировать, либо сделать кнопку принудительного запуска.