Foros del Web » Programando para Internet » PHP »

Comprimir a zip con PHP

Estas en el tema de Comprimir a zip con PHP en el foro de PHP en Foros del Web. Buenas a todos y gracias de antemano, ando investigando, me gustaría hacer lo siguiente: Quiero hacer un codigo en php que comprima el contenido de ...
  #1 (permalink)  
Antiguo 20/05/2010, 08:33
 
Fecha de Ingreso: enero-2009
Mensajes: 16
Antigüedad: 15 años, 9 meses
Puntos: 0
Comprimir a zip con PHP

Buenas a todos y gracias de antemano,
ando investigando, me gustaría hacer lo siguiente:

Quiero hacer un codigo en php que comprima el contenido de una carpeta, con sus archivos y subdirectorios, he conseguido generar un .zip con los archivo (pero en blanco, sin datos), y tampoco los subdirectorios, y también poder luego descomprimir tal archivo.

He buscado en google, y he leido muchos post y muchos foros, pero no encuentro o lo que veo me da fallo.

Espero que me podais ayudar.

Muchísimas gracias y un saludo enorme!!
  #2 (permalink)  
Antiguo 20/05/2010, 08:53
Avatar de wiwi74  
Fecha de Ingreso: marzo-2008
Mensajes: 515
Antigüedad: 16 años, 8 meses
Puntos: 10
Respuesta: Comprimir a zip con PHP

A ver si te sirve:

/* CREA UN ARCHIVO COMPRIMIDO */
//"Funciones de Secuencias" en manual de php


$file = "archivo.txt";
$archivo = file_get_contents($file);
$result = explode(".", $file);
$da = fopen("compress.zlib://".$file.".gz", "wb");
if (!$da){echo "Error.";}else{echo "OK!!.";}
fwrite($da, $archivo);
fclose($da);

//debes crear en el mismo directorio un "archivo.txt" que se comprimira

Mira, si comprime no lo se, pero si que crea un rar con el txt dentro
Aqui se uso fopen()

Mira el manual (usando funciones rar):
http://php.net/manual/es/book.rar.php

Bueno pides un zip, es casi lo mismo.

Saludos...!
  #3 (permalink)  
Antiguo 20/05/2010, 11:45
 
Fecha de Ingreso: enero-2009
Mensajes: 16
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Comprimir a zip con PHP

Muchísimas gracias por todo, he probamos lo que comentas y funciona, pero me sigue surgiendo una duda....
como lo hago de manera que en vez de un archivo comprima un directorio??

Espero me puedas ayudar de nuevo.

Gracias!
  #4 (permalink)  
Antiguo 20/05/2010, 11:53
Avatar de BloodShadow  
Fecha de Ingreso: marzo-2010
Ubicación: El Salvador
Mensajes: 393
Antigüedad: 14 años, 8 meses
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>
  #5 (permalink)  
Antiguo 20/05/2010, 12:22
 
Fecha de Ingreso: enero-2009
Mensajes: 16
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Comprimir a zip con PHP

Muchas gracias por tu ayuda, pero me dan errores:

Carpetas:
Warning: stat() [function.stat]: stat failed for zips_temps/prueba.zip in C:\Program Files\EasyPHP 3.0\www\script\prueba.php on line 71

Warning: unlink(zips_temps/prueba.zip) [function.unlink]: No such file or directory in C:\Program Files\EasyPHP 3.0\www\script\prueba.php on line 76

Warning: stat() [function.stat]: stat failed for zips_temps/zips_temps.zip in C:\Program Files\EasyPHP 3.0\www\script\prueba.php on line 71

Warning: unlink(zips_temps/zips_temps.zip) [function.unlink]: No such file or directory in C:\Program Files\EasyPHP 3.0\www\script\prueba.php on line 76
prueba
Warning: chmod() [function.chmod]: No such file or directory in C:\Program Files\EasyPHP 3.0\www\script\prueba.php on line 86
Descargar carpeta

La verdad que no se exactamente porque, alguna idea??

Gracias!!

Última edición por Elixita; 20/05/2010 a las 12:37
  #6 (permalink)  
Antiguo 20/05/2010, 13:54
Avatar de BloodShadow  
Fecha de Ingreso: marzo-2010
Ubicación: El Salvador
Mensajes: 393
Antigüedad: 14 años, 8 meses
Puntos: 52
Son warning, pero siempre te lo ejecuta, lo que tienes que hacer es deshabilitar los error en el php.ini o simplemente donde ocupas esas funciones escribir una arroba, por que a veces son cosas de permisos (si es que usas linux) puede hacerlo por ejemplo asi.

@unlink() ;
@stat() ;

etc etc y te ira sin problemas

Suerte

EDIT: no avia visto los errores, tenes que crear los directorios correctamente, ya que yo uso linux, con crear la variable $root = "./" me basta, tenes que indagar un poco como hacerlo en guindows xq la verdad no se usar guindow, ni quier aprender a usarlo jajaja

Lo otro que podria ser, es que no tengas instaladas las librerias, aunque lo dudo...

PD: sorry por el doble post

Última edición por GatorV; 20/05/2010 a las 19:26

Etiquetas: comprimir, zip
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:40.