По шагам:
1. Генерируете архив пишете его в tmp директорию на сервере
2. шлёте заголовок в браузер пользователя
header("Content-disposition: attachment; filename=archive.zip");
3. читаете архив из tmp
echo file_get_contents("/path/to/tmp/my.zip");
4. удаляете временный файл с архивом