Hola, hace poco hice eso yo, y me costo un webo pero lo compartire contigo, lo unico que necesitaras crear una carpeta temporal donde se iran guardando los archivos zip temporalment, pero se iran borrando a diario o cuando lo quieras descarga de nuevo, aca te dejo el codigo.
Pero este scrip te sirve para comprimir el directorio y luego descargarlo, pero si solo quieres los zip, quita los header y te ira de maravilla
Código PHP:
<?php
$root = "./";
$directorio=opendir($root);
if($_GET["download"]){
function comprimir($ruta, $zip_salida, $handle = false, $recursivo = false){
/* Declara el handle del objeto */
if(!$handle){
$handle = new ZipArchive;
if ($handle->open($zip_salida, ZipArchive::OVERWRITE) === false){
return false; // Imposible crear el archivo ZIP
}
}
/* Procesa directorio */
if(is_dir($ruta)){
/* Aseguramos que sea un directorio sin carácteres corruptos */
$ruta = dirname($ruta.'/arch.ext');
$handle->addEmptyDir($ruta); /* Agrega el directorio comprimido */
foreach(glob($ruta.'/*') as $url){ /* Procesa cada directorio o archivo dentro de el */
comprimir($url, $zip_salida, $handle, true); /* Comprime el subdirectorio o archivo */
}
/* Procesa archivo */
}else{
$handle->addFile($ruta);
}
/* Finaliza el ZIP si no se está ejecutando una acción recursiva en progreso */
if(!$recursivo){
header('Location: zips_temps/' . $_GET['download'] . '.zip') ;
readfile($ruta);
$handle->close();
}
return true; /* Retorno satisfactorio */
}
if(comprimir($_GET['download'], 'zips_temps/' . $_GET['download'] . '.zip')){
echo 'Ok' ;
}else{
echo 'Error';
}
}else{
?>
<span>Carpetas:</span>
<table cellpadding="0" cellspacing="0" border="0">
<?
if(!file_exists('zips_temps')){
mkdir('zips_temps') ;
chmod('zips_temps', 0777) ;
}
while (($archivo = readdir($directorio))!==false){
if((!is_file($archivo)) and ($archivo!='.') and ($archivo!='..')){
$date_mod = stat('zips_temps/' . $archivo . '.zip');
$last_day = strftime('%d-%B-%Y', $date_mod['mtime']);
$today = date("d-M-Y");
if($last_day < $today){
unlink('zips_temps/' . $archivo . '.zip') ;
}
?>
<tr>
<?
if($archivo != 'zips_temps'){
?>
<td style="padding: 3px;">
<?
echo $archivo;
chmod ('zips_temps/' . $archivo . '.zip', 0777) ;
?>
</td>
<td style="padding: 3px;">
<a href="?download=<?=$archivo?>">Descargar carpeta</a>
</td>
<?
}
?>
</tr>
<?
}
}
closedir($directorio);
}
?>
</table>