Probabilmente la soluzione è quella di far eseguire lo ZIP ad un processo in background (tramite cron/scheduled task). Una volta che lo ZIP è pronto per il download mandi una mail all'utente con il link (es. valido solo per 24 ore etc.). Sempre nello stesso script schedulato puoi effettuare la pulizia della cartella dove metti gli ZIP in modo da non riempirti di file inutili.