Listar y descomprimir archivos zip con PHP

En este artículo vamos a ver cómo se pueden manejar archivos comprimidos en formato zip mediante scritps PHP.
Los módulos para la gestión de archivos zip vienen por defecto con PHP así que no hay que instalar nada.
En este ejemplo mostraré como leer el contenido de un archivo zip para saber qué archivos contiene y también como descomprimir estos archivos en la ubicación que nos interese.

Esto puede ser de gran utilidad si hacemos una aplicación web en la que se permita subir archivos comprimidos mediante un formulario y luego hacer que la aplicación lo descomprima y lo almacene en su lugar correspondiente.

A continuación pongo una clase que permite realizar las operaciones antes comentadas. Se trata de un ejemplo muy sencillo.

NOTA: el nombre del archivo se debe especificar mediante su ruta absoluta.

Ejemplo 1. Clase para el manejo de archivos zip.

<?php
class Zip_manager{
function Zip_manager(){}
function listar($input){
/*
Lista de los archivos que contiene un paquete zip.
$input: archivo zip que se va a listar
*/
$entries = array();
$zip = zip_open($input);
if (!is_resource($zip)){
echo $this->zipFileErrMsg($zip);
die (“No se puede leer el archivo zip. Error:”.$zip);
}
else{
while ($entry = zip_read($zip)){
$entries[] = zip_entry_name($entry);
}
}
zip_close($zip);
return $entries;
}
function extraer($input, $destino){
/*
Descomprime un paquete zip en un directorio especifico
$input: archivo zip a descomprimir
$destino: carpeta donde se descomprime
*/
$zip = new ZipArchive;
if ($zip->open($input) === TRUE) {
$zip->extractTo($destino);
$zip->close();
return true;
} else {
return false;
}
}
}
?>

Para utilizar esta clase deberíamos escribir un código como el siguiente:

<?php
$zip_manager = new Zip_manager();
$archivo_zip = “archivo.zip”;
$listado = $zip_manager->listar($archivo_zip);
print_r($listado);
$resultado = $zip_manager->extraer($archivo_zip, “carpeta_temporal”);
if (!$resultado){
echo “Error: no se ha podido extraer el archivo”;
}
else{
echo “Archivo extraido con exito”;
}
?>
Sin categoría

Deja una respuesta