Comprimir archivos con PHP

En: PHP

20 ene 2007

WP Greet Box icon
Hola! Si estás nuevo por aquí y te gusta lo que ves, puedes disfrutar de una actualización automática y gratuita por RSS para leer nuestros artículos completos cuando lo deseas en tu lector RSS favorito.

Para comprimir archivos con php, de manera sencilla podemos descargar la clase AlfaZoneSoft Zip Lib. Un ejemplo de su uso es:

  1. <?php
  2.  
  3. //Incluimos la clase
  4. require('zip.lib.php');
  5. //La instanciamos
  6. $zip = new zip();
  7.  
  8. $path = 'ruta donde se encuentra el archivo a comprimir';
  9. $name = 'nombre del archivo comprimido, podemos usar / para crear una estructura de directorios';
  10.  
  11. //Anadimos el archivo a comprimir
  12. $zip->addFile($path, $name);
  13.  
  14. $pathSave = 'Ubicacion/nombre.zip';
  15. //Guargamos el archivo
  16. $zip->saveZip($pathSave);
  17.  
  18. //Si desaemos inmediatamente descargar el archivo compreso
  19. $zip->downloadZip($pathSave);
  20.  
  21. ?>

Notemos que el nombre de la clase es Zip, esto puede generar problemas dado que existe una extension de APACHE que usa este mismo nombre, si la tenemos habilitada el script anterior generara un error, para solucionarlo, solo tenemos que cambiar el nombre de la clase.

Podemos descargar zipArchive una modificación hecha por UnderMedia para solucionar este problama

Aunque la clase es muy buena tiene una limitante, no posee un método para comprimir todo el contenido de un directorio especifico.

Si deseamos comprimir el contenido de un directorio completo podemos usar las funciones opendir() y readdir() asi:

  1. <?php
  2. require('zipArchive.class.php');
  3. $zip = new zipArchive();
  4.  
  5. $dir = "directorio que deseamos comprimir";
  6.  
  7. $directorio=opendir($dir);
  8. while ($archivo = readdir($directorio)) {
  9. if(!is_dir("$dir/$archivo"))
  10. $zip->addFile($dir.'/'.$archivo, "image/$archivo");
  11. }
  12. closedir($directorio);
  13.  
  14. $pathSave = 'nombre.zip';
  15. $zip->saveZip($pathSave);
  16. $zip->downloadZip($pathSave);
  17. ?>

Descargar el código: zipDir

Otros post

Este post ha sido visto 22984 veces

12 nomentarios para Comprimir archivos con PHP

Avatar

juan david zapata

septiembre 26th, 2007 at 17:00

Me descargue los dos archvos tanto la libreria como el archvo de ejemplo y me saca saca un error que me dice que no se encuentra la funcion saveZip.

Si uds me pudieran facilitar el archivo ‘zip.lib.php’ me serviria mucho ya que el que me descargo no trae esa funcion dentro del codigo fuente.

Muchas gracias

Avatar

Pablo Veintimilla

septiembre 27th, 2007 at 11:45

Hola Juan gracias por tu comentario, para usar el ejemplo por favor descarga zipArchive una modificacion hecha por UnderMedia, para corregir conflictos de nombres con la clase original.
Gracias a tu comentario incluí este archivo, lo puedes descargar desde el mismo post.

Saludos!

Avatar

carlos Sanitillán

diciembre 7th, 2007 at 17:44

Hola, el código que comparten, esta bien, pero al comprimir los archivos que se le señala, los hace pero sin la data que tienen ellos, por ejemplo yo estoy comprimiendo txt’s , con datos, pero solo suben los archivos vacios, agradecere me contesten por que pasa esto… gracias……..

Avatar

bruno

junio 9th, 2008 at 10:59

Muy buena clase me sirvio muchismo….. al generar el archvio ZIP se agrega un TXT zip info sabes como puedo modificarlo?

Avatar

Oscar

septiembre 1st, 2008 at 23:32

Exelente!!!

Avatar

Carlos

abril 2nd, 2009 at 16:57

No me funciona, intente por todos los metodos y el archivo que genera es un ZIP que tiene dentro un archivo vacio. El archivo que quiero comprimir es un archivo de texto de 5 megas.

Avatar

Alomaximo

febrero 19th, 2010 at 12:47

Justo lo que buiscaba, graciasssss compatriota

Avatar

Bere

marzo 12th, 2010 at 14:26

Hey gracias me ha servido, pero quisiera añadirle seguridad. Se le puede colocar una contraseña al momento de comprimirlo?

Avatar

Alvaro gonzalez

mayo 22nd, 2010 at 23:31

Hola muchas gracias sirvio de mucho , el problema ahora es otro,,
puedo comprimir y descargar una carpeta con sus archivos al interior, como lo hago para que las carpetas que estan dentro de la carpeta principal se compriman tambien y las que esten dentro de estas ,??

me ayudarias mucho ,, de antemano gracias

Avatar

Sup

junio 14th, 2010 at 17:19

como se puede hacer para comprimir el contenido del directorio en partes, en varios .zip ? ya que mi server me limita el uso de memoria y son muchos los archivos a comprimir…

gracias.

Avatar

wilson

junio 15th, 2010 at 16:03

tengo la misma inquietud de alvaro. funciona bien pero no comprime las carpetas al interior. si alguien sabe por favor como se hace

Avatar

Fran

julio 17th, 2010 at 06:51

Hola,

Mi pregunta es, ¿cómo se puede eliminar el archivo una vez se haya terminado la descarga? Es decir, cuando se comprime el directorio, el archivo se autocoloca en la raíz del sitio y aunque se descargue sigue estando ahí…

¿Alguna sugerencia? Gracias chaval, me ha sido de gran ayuda.

Deja tu comentario!

Acerca de UnderMedia

Inspiración y Determinación |
En Blog UnderMedia se recopilan y publican periódicamente noticias, artículos o comentarios generados dentro de UnderMedia S.A.

Twitter UnderMedia

  • Gaby: No le entendi XD [...]
  • makinista: Como podría hacer para que al hacer clic en un botón me cargara un html en otra parte de una web c [...]
  • Pablo: hola, muy bueno hombre, queria hacerte una pregunta, tal ves sea tonta no se, cual es la ventaja de [...]
  • Antony: Para ponerlo en tus páginas es necesario seguir estas instrucciones http://www.gentlesource.com/do [...]
  • Antony: Funciona perfecto. A los que les sale la página en blanco, si instalaron el modulo de lengua en esp [...]

Comunidad

Ultimas visitas

Raking

  • Blogalaxia
  • Top Blogs Ecuador

Switch to our mobile site