Underc0de

Programación Web => Back-end => Mensaje iniciado por: arthusu en Marzo 16, 2015, 02:39:33 AM

Título: Comprimir directorios completos de tu sitio web
Publicado por: arthusu en Marzo 16, 2015, 02:39:33 AM
Buenas hoy estaba escuchando musica y luego un amigo (NoVaTo) me hablo por Skype diciendome que si tenia algun script o shell que comprimiera toda la pagina web para bajarsela, entonces como no tenia me puse a buscar como hacerlo uno a mi manera... hasta que al final di con bola... pues nada mas les dejo el script par aque lo usen cuando quieran:

Código (php) [Seleccionar]
<?php
// Si son demasiados archivos colocamos el tiempo limite en 0 (sin limite)
set_time_limit(0);
 
/*
  @autor : Arthusu
  @fecha : 15/03/2015
  @descripcion : Compresor de todos los archivos del directorio
  @archivo : compresor.php
 */

 // definimos las variables (las podemos modificar segun sea nuestro caso)
 
$nombre_del_archivo_comprimido "comprimido.zip"// el nombre del archivo a generar
 
$ruta_relativa ""// el directorio que nos encontremos. Ejemplo: images/algo/ para generar un link correcto

 
if(phpversion() >= "5.2.0"){ // verificamos que contengan la version correcta para crear archivos zip
  
$zip = new ZipArchive(); // Creamos un nuevo objeto
  
if($zip->open($nombre_del_archivo_comprimido,ZIPARCHIVE::CREATE) === TRUE){ // creamos un archivo
   
$iterator = new RecursiveDirectoryIterator(__DIR__); // recorremos el directorio
   
$recursiveIterator = new RecursiveIteratorIterator($iterator); // recorremos los directorios dentro de otros directorios y asi sucesivamente

   
foreach($recursiveIterator as $entry){ // recorremos los archivos
     
if(is_file($entry->getRealPath())){ // verificamos que sea archivo
      // debug
      //echo $entry->getRealPath()."\n";
         
$zip->addFile($entry->getRealPath()); // lo agregamos al zip
        
}
   }
   
// mostramos un enlace con los archivos
   
echo $zip->numFiles .' archivos comprimidos: <a href="http://'.strip_tags($_SERVER["HTTP_HOST"]. "/" $ruta_relativa $nombre_del_archivo_comprimido).'">Descargar Archivo</a>';
  }else{
   
// si no se crea el archivo mostramos el error
   
echo "Ha ocurrido un error: ".$zip->getStatusString();
  }
  
// cerramos el archivo zip
  
$zip->close();
 }else{
  
// si la version no es correcta mostramos un mensaje
  
echo "Su version de PHP debe ser 5.2.0 o superior";
 }
?>



El uso es bastante facil.

1.- Subir el archivo a la carpeta que quieras comprimir
2.- Ejecutar el archivo en la url: ejemplo.com/compresor.php
3.- Te generara un link donde descargar el archivo

Hay dos variables que puedes modificar dentro del archivo:

$ruta_relativa - Esta variable la modificas en caso de que te encuentres en una ruta relativa en alguna carpeta de la web, ejemplo: jquery/imagenes/, con eso nos generaria un link como el siguiente:  ejemplo.com/jquery/imagenes/comprimido.zip

$nombre_del_archivo_comprimido - Aqui puedes especificar el nombre del archivo resultante

Nota: Otra cosa a tomar en cuenta es que el script tarda dependiendo de que tantos archivos tenga que guardar o recorrer, puede tardar varios minutos dependiendo de que tantos archivos contenga tu sitio.

Y bueno eso es todo espero que la herramienta les sea de utilidad.
Título: Re:Comprimir directorios completos de tu sitio web
Publicado por: DeBobiPro en Marzo 23, 2015, 09:10:59 AM
Muchas gracias por el Script, nunca es malo tener algo así a la mano especialmente cuando se trabaja con algun CMS.

Saludos!
Título: Re:Comprimir directorios completos de tu sitio web
Publicado por: torreone en Junio 06, 2018, 09:02:52 AM
Primero muchas gracias por el aporte.

Funciona muy bien el script, mi pregunta es si cuando lo guardamos en el zip comprimido puedo guardar los directorios y archivos de las carpetas que le indique y no que me guarde toda la ruta absoluta. Por ejemplo si quiero comprimir la carpeta /images/* que en el zip me aparezca esa carpeta y su contenido y no toda la ruta relativa :C:\..\...\..\images\*

Gracias.