Leer y escribir Zip en PHP sin complicarse la vida
Escrito por Alex Barros Lo que hoy quiero mostraros es una genial librería, que facilita increíblemente el manejo de archivos zip con PHP; únicamente habrá que incluir un archivo a nuestro código, para gozar de toda su funcionalidad para abrir, explorar y crear archivos de tipo Zip.
Instanciación
El primer paso para usar esta librería es siempre el mismo, independientemente de lo que queramos hacer:
-
require_once("pclzip.lib.php");
-
$archivo = new PclZip("archivo.zip");
Como se observa, hemos incluido el fichero de la librería, y hemos instanciado la clase PclZip, con un nombre de archivo.
Este nombre de archivo puede ser uno existente, que queremos manipular, o uno inexistente, que queremos crear a continuación. Será más adelante cuando le indicamos lo que queremos hacer con archivo.zip (leer o escribir), hasta aquí únicamente lo hemos referenciado.
Lectura
En caso de que el archivo Zip sí exista, y queramos explorar su contenido, tenemos varias alternativas.
La primera es usar el método listContent(), el cual nos devuelve una lista de propiedades de los archivos y carpetas contenidos en el archivo zip.
-
include_once("pclzip.lib.php");
-
-
$zip = new PclZip("test.zip");
-
-
if (($list = $zip->listContent()) == 0) {
-
}
-
-
for ($i=0; $i<sizeof($list); $i++) {
-
}
-
echo "<br>";
-
}
-
Lo cual nos devuelve algo como esto:
File 0 / [filename] = data/file1.txt Archivo 0 / [stored_filename] = data/file1.txt Archivo 0 / [size] = 53 Archivo 0 / [compressed_size] = 36 Archivo 0 / [mtime] = 1010440428 Archivo 0 / [comment] = Archivo 0 / [folder] = 0 Archivo 0 / [index] = 0 Archivo 0 / [status] = ok Archivo 1 / [filename] = data/file2.txt Archivo 1 / [stored_filename] = data/file2.txt Archivo 1 / [size] = 54 Archivo 1 / [compressed_size] = 53 Archivo 1 / [mtime] = 1011197724 Archivo 1 / [comment] = Archivo 1 / [folder] = 0 Archivo 1 / [index] = 1 Archivo 1 / [status] = ok
Si nos interesa más extraer el contenido descomprimiendo archivos y carpetas, tendremos que usar el método extract(), el cual nos brinda muchas opciones. Veamos un ejemplo:
-
include("pclzip.lib.php");
-
$archivo = new PclZip("archivo.zip");
-
-
if ($archivo->extract(PCLZIP_OPT_PATH, "data",
-
PCLZIP_OPT_REMOVE_PATH, "install/release") == 0) {
-
}
En este ejemplo todos los archivos se extraen en la carpeta “data”. Todos los archivos cuya ruta empiece por “install/release”, serán extraidos directamente en “data”, y no en “data/install/release”.
Existen muchas opciones con las que indicar exactamente lo que queremos que haga al extraer nuestros archivos. Puedes consultarlas en la documentación.
Escritura
Si tu intención es crear un archivo zip “al vuelo”, esta librería también va a yudarte, gracias al método create(), que creará un archivo zip con los archivos y carpetas que le indiquemos. Si le indicamos una carpeta, automáticamente incluirá todo el contenido en su interior. Además mantendrá la estructura de carpetas intacta dentro del archivo zip que creemos.
-
include_once("pclzip.lib.php");
-
$archivo = new PclZip("archivo.zip");
-
-
$v_list = $archivo->create("data/file.txt,data/text.txt",
-
PCLZIP_OPT_REMOVE_PATH, "data",
-
PCLZIP_OPT_ADD_PATH, "install");
-
if ($v_list == 0) {
-
}
En el anterior código los archivos “file.txt” y “text.txt”, que se encuentran en la carpeta “data”, en el archivo zip creado se encontrarán en la carpeta “install”.
La librería nos permite manipular archivos zip con toda comodidad, usando los métodos add(), delete() o merge() , que añade archivos, elimina archivos, y fusiona archivos, respectivamente.
Ejemplo de añadir archivos:
-
require_once("pclzip.lib.php");
-
$archivo = new PclZip("archivo.zip");
-
-
$v_list = $archivo->add("file.txt,data/text.txt,folder/");
-
if ($v_list == 0) {
-
}
Como podéis ver, se trata de una librería completa y funcional. Recomiendo su uso frente a otras alternativas.
Si quieres ver un ejemplo de su uso, puedes echar un vistazo al explorador de archivos zip que he incorporado en Codis.
Categorias: Aplicaciones, Código, HOWTO/CóMO, PHP |



Noviembre
16:30 Sebastian Ha dicho:
Justo lo q buscaba, mil gracias.
Noviembre
16:54 Alex Barros Ha dicho:
No hay de que!
Diciembre
17:38 Diego Ha dicho:
Hola Alex,
esta excelente tu nota sobre pclzip! he estado probando muchas cosas con esta utilidad y realmente esta increíble, aunque hay una cosa que no he logrado hacer, que es crear zips con archivos que se encuentran en otro directorio, p.e. tengo mi servidor apache en C://appserv/www/miweb/ pero mis archivos los tengo en D://archivos/para/zipear, pero me el siguiente error:
Error : PCLZIP_ERR_MISSING_FILE (-4) : File ‘/archivos/para/zipear/071213_archivo.wmv’ does not exists
el archivo existe, el nombre de archivo es correcto, lo único que he notado que en el error no me muestra la unidad que le he marcado en este caso la unidad D:, tienes alguna sugerencia al respecto?
saludos, Gracias.
Diciembre
18:35 Alex Barros Ha dicho:
Tal vez no esté preparado para los path de Windows, que son distintos a los de los sistemas UNIX (entorno idóndeo para PHP)
Realmente no puedo contestarte con certeza, ya que sólo doy a conocer la herramienta, desconozco por completo su funcionamiento interno.
Un saludo, y mucha suerte.