Pues si existirá .. las funcioenes para todo lo que propones ya existen:
Objeto predefinido:
dir()
www.php.net/dir
(para leer tu directorio)
header()
www.php.net/header
(para que des salida a tus cabeceras HTTP para entregar tu .zip al navegador para descarga).
Sobre generar el .zip .. existen classes para tal fin ejemplo:
http://promoxy.mirrors.phpclasses.or...ip&go_search=1
(en el foro tienes multitud de ejemplos .. incluido las FAQ's de este foro)
Tambien puedes buscar por
www.classes.org o
www.hotscripts.com para ver si hay algo ya implementado ..supongo que sí.
Un saludo,
pd: .. El tiempo de proceso de comprimir tus archivos .. leerlos ..es tiempo de proceso igualmente para tu servidor ojo con eso. Tal vez te haga falta usar tambien: set_time_limit()