Ver Mensaje Individual
  #4 (permalink)  
Antiguo 20/05/2010, 11:53
Avatar de BloodShadow
BloodShadow
 
Fecha de Ingreso: marzo-2010
Ubicación: El Salvador
Mensajes: 393
Antigüedad: 14 años, 1 mes
Puntos: 52
Respuesta: Comprimir a zip con PHP

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_salidaZipArchive::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$handletrue); /* 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>