No ono to není zrovna moc lehký. PHP skripty totiž by default dostanou požadavek, něco udělají a vrátí zpět odpověď. Tento skript bude dlouho něco dělat a nemůže tak odpovídat. Může jen někam ukládat svůj stav odkud si to bude JS vyzobávat. Navíc je u takovýchto řešení vždy potřeba nějaký token. Když bude např. 10 uživatelů najednou čekat až se něco zazipuje.
Další problém pak je, kdy ten zip ze serveru smažeš . Nemáš totiž šanci zjistit, jestli si ho uživatel ještě stahuje (jedině že bys to servíroval přímo skrz PHP skript, což není dobrej nápad a hosting ti stejně na 99% tak dlouhý spojení utne).
Do třetice nesmíš zapomínat, že je to extrémně náchylný na DDOS. Požadavků na zazipování něčeho velkýho ti může přijít během sekundy mračna a server se z toho sesype.
Těch možný úskalí je tam každopádně ještě víc. Kdysi jsem to řešil a moc to nedopadlo . Už si nevzpomínám odkud jsem čerpal. Google mi teď pošeptal akorát tohle.
Se samotným execem by moc problém být neměl. S vhodným přepínačem by ti měl archivační program na standardní výstup průběžně sdělovat aktuální stav...
Jinak pokud by nebyl problém s těmi dlouho běžícími skripty, existuje knihovna ZipStream-PHP, která archivuje přímo stream dat, kterej se stahuje. Řeší tak všechny výše uvedené problémy.