Zumbe.net

Comenzando a programar una web

Crear archivos ZIP y TAR al vuelo con PHP (Crear los archivos)

Para crear los archivos vamos a usar los paquetes PEAR::Archive_Zip y PEAR::Archive_Tar. Como son paquetes PEAR, también tienes que descargarte el archivo principal PEAR.php. También te puedes descargar e instalar la librería PEAR completa, o símplemente descargarte el archivo PEAR.php. Pero como te basta con el archivo PEAR.php te recomiendo que uses esta opción, en vez de instalarte la librería completa.

Empecemos con el paquete PEAR::Archive_Zip. Es sorprendentemente fácil de usar, y sólo necesitas tres líneas para crear un nuevo archivo zip:

Código: php
  1.  
  2. <?php
  3. include (‘pear/archive_zip.php’);
  4.  
  5. // Crear la instancia de la clase Archive_Zip e introducir el nombre de nuestro archivo zip
  6. $zipfile = New Archive_Zip(‘myzipfile.zip’);
  7.  
  8. // Crear una lista de archivos y directorios
  9. $list = array(‘example.txt’);
  10.  
  11. // Crear el archivo zip
  12. $zipfile->create($list);
  13.  
  14. echo ‘Archivo Zip creado’;
  15.  
  16. ?>
  17.  

Vamos a analizar el ejemplo. Primero incluimos el paquete PEAR::Archive_Zip, después creamos una instancia de la clase Archive_Zip e introducimos el nombre de nuestro archivo zip que vamos a crear como primer parámetro.

Después construimos una lista de todos los archivos y directorios que deben ser incluidos en el archivo zip. En el ejemplo nos hemos limitado a incluir el archivo llamado example.txt que se encuentra en el mismo directorio que el script. Esta lista de archivos se pasa al método create() del objeto, y el archivo zip actual se crea, y estará localizado en la misma dirección que tu script.

Todo parece muy sencillo, pero existen algunas pegas. Por ejemplo, si la dirección no tiene permisos de escritura, no podremos crer el archivo zip, y en la mayoría de casos la dirección no tiene estos permisos, así que tendremos que pensar una solución.

Utilizar el directorio temporal

23 Octubre 2006 · Tags Sin categoría |

7 Comentarios

Javi dice:

Y ¿cómo realizar el proceso inverso?, osea, (descomprimir un zip al vuelo en el servidor)

Es curioso pero el archivo Zip.php no viene acompañado por ningún tipo de documentación, y el Tar.php, que sí incorpora un txt, tiene una función “extract()” que no consigo hacer funcionar.

Mi interés principal es descomprimir Zips, pero a la vista de que no conseguía nada, empecé a probar con archivos .tar a ver si lo conseguía, pero sigo sin lograrlo.

Parto de que es posible ya que tengo Joomla y Mambo instalados en dos servidores distintos (de alquiler, no propios) y la funcionalidad de ambos a la hora de instalar un zip o un tar.gz viene de la mano de PEAR. Lo que me extraña es que dentro de la carpeta PEAR sólo existe un archivo Tar.php, no está Zip.php, por lo que deduzco que con Tar.php se pueden manejar tanto tar.gz como zip.

Exactamente este es el código que intento hacer funcionar y no lo consigo:

extract();
?>

Lo he probado tanto con zip como con tar, y tanto sin parámetros en extract() como indicando un ruta de extracción (ej: extract(”micarpeta”);

¿Dónde estoy fallando?, ¿podrías ponerme un ejemplillo?

Muchas gracias, (y tengo fé en obtener respuesta posteando en un artículo que fue escrito hace un año. Tengo fé pero ninguna certeza).

Un saludo


19 de Septiembre del 2007 a las 23:04
Javi dice:

Vaya, veo que hay restricciones en este campo de entrada y no ha aparecido el código como es debido. Voy a convertir los caracteres reservados HTML a ver si funciona:

<?php
include ("PEAR/Tar.php");
$tar_object = new Archive_Tar("kk.tar");
$tar_object->extract();
?>

A ver si hay suerte ;)
Otro saludo


19 de Septiembre del 2007 a las 23:09
Alex dice:

Hola Javi. Para la lectura de Zips existe un módulo documentado en PHP.net:
http://es2.php.net/manual/es/ref.zip.php

Un saludo.


19 de Septiembre del 2007 a las 23:13
Javi dice:

Hola Alex. Gracias por tu respuesta. Lo cierto es que ya había llegado en alguna búsqueda a esa librería (ZZIPlib) y había pasado de largo por entender que requiere su instalación y configuración en PHP. No sé si será realmente así o si habrá otra forma de implementarla símplemente con un archivo PHP (como en el ejemplo del tutorial en el que estamos escribiendo ahora mismo) En este caso se puede usar el archivo PEAR.php y Zip.php sin instalación de dll’s ni parametrización en PHP.

Esta cuestión me resulta importante ya que estoy buscando la forma de descomprimir en un servidor donde no tengo acceso a modificar la configuración de PHP.

Como digo, parto de que se puede hacer ya que tengo Joomla instalado y cada vez que instalo un componente, Joomla descomprime el zip.

Trasteando un poco las carpetas de Joomla encontré el archivo PEAR.php y Tar.php adaptados para Joomla, pero en esencia son la misma cosa. Y sólo con estos dos archivos (que yo sepa), Joomla es capaz de descomprimir zips.

¿No existe forma de descomprimir con Zip.php o Tar.php? y por otra parte, ¿se puede usar ZZIPlib sin instalar la dll, osea únicamente implementando funciones de código PHP?

Muchas gracias.
Un saludo, Javi


22 de Septiembre del 2007 a las 19:11
Alex dice:

He de decir que en este tema no estoy demasiado enterado. De hecho este tutorial es una traducción mia, no soy el autor.

Como último recurso, te recomiendo esta librería. He oido muy buenas críticas sobre ella, y permite tanto lectura como escritura de archivos Zip.

http://www.phpconcept.net/pclzip/index.en.php

Si lo pruebas, te agradecería que comentaras cómo te fue. De esta forma sabré si recomendarla en un futuro o no.

Un saludo.


22 de Septiembre del 2007 a las 19:22
Javi dice:

Funciona!!!

Aún no me he metido a probar opciones más complejas como filtrados o renombramiento dinámico de carpetas, me he limitado a comprimir un zip con un único archivo, he usado una única función de extracción (también denominada “extract()”) y se ha descomprimido correctamente.

Muchas gracias Alex, tu ayuda ha sido muy importante en mi, hasta ahora, inconclusa búsqueda.

Pondré a prueba la librería antes de dar el veredicto final. De momento, te diría que es muy recomendable. Tanto por la sencillez del paquete (un único php) como por la documentación al respecto.

Veremos si en unos días sigo manteniendo la misma idea.

Una vez más gracias y un saludo.


22 de Septiembre del 2007 a las 21:54
JuegosEnMovil.com dice:

Una librería para trabajar con tar y zip… desde PHP.


8 de Junio del 2008 a las 12:00

Escribe un comentario!

Buscador

2005-2007 Zumbe.net Creada por Alex Barros con WordPress - Licencia Reconocimiento - RSS