Comenzando a programar una web
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:
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 |
« Crear archivos ZIP y TAR al vuelo con PHP (Introducción) | | Crear archivos ZIP y TAR al vuelo con PHP (Directorio temporal) »
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
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
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.
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
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.
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.
Una librerÃa para trabajar con tar y zip… desde PHP.