Manejo de archivos comprimidos en PHP

Escrito por Jonathan Melgoza el . Posteado en Tutoriales y tips

Es frecuente tener que manejar varios archivos en nuestros sistemas o páginas web por lo que realizar un correcto manejo de archivos comprimidos en PHP se vuelve algo fundamental para cualquier programador web.

Hoy vamos a ver cómo realizar correctamente este manejo de archivos comprimidos en PHP desde crear un comprimido hasta la extracción de estos documentos, en resumen vamos a:

  1. Crear un archivo comprimido en PHP
  2. Visualizar un archivo comprimido en PHP
  3. Descomprimir un archivo comprimido en PHP
  4. Descomprimir un archivo comprimido con contraseña en PHP

Para este tutorial con código PHP vamos a hacer uso de la clase ZipArchive, podemos ver su documentación completa en el sitio de PHP.

Para todos los ejemplos que veremos el dia de hoy es necesario crear un objeto de la clase ZipArchive y al terminar de hacer nuestras operaciones con él será necesario cerrarlo.

Nota: En los siguientes snippets de codigo llamaremos a nuestro archivo comprimido como archivo-comprimido.zip.

Crear un archivo comprimido en PHP

Para esta función haremos uso del metodo open de ZipArchive asi como del metodo addFromString para agregar un archivo desde texto a nuestro archivo comprimido.

Si quisieramos agregar un archivo, y no un string, entonces utilizariamos el metodo addFile indicando la ruta del archivo a incluir en nuestro comprimido.

<?php

//CREAR UN COMPRIMIDO
$zip = new ZipArchive();
$nombrecomprimido = "./archivo-comprimido.zip";

if ($zip->open($nombrecomprimido, ZipArchive::CREATE)!==TRUE) {
    exit("No se ha podido crear el comprimido <$nombrecomprimido>\n");
}

$zip->addFromString("archivo1" . time() . ".txt", "Contenido del archivo 1.\n");
$zip->addFromString("archivo2" . time() . ".txt", "Contenido del archivo 2.\n");
$zip->addFromString("archivo3" . time() . ".txt", "Contenido del archivo 3.\n");
//$zip->addFile('/ruta/a/archivo.txt', 'archivo.txt');

echo "Actualmente " . $zip->numFiles . " archivos en el comprimido.<br>";

$zip->close();

?>

Visualizar un archivo comprimido en PHP

Para visualizar un archivo comprimido haremos uso de nueva cuenta del metodo open para comenzar a trabajar con nuestro archivo comprimido asi como de los metodos numFiles para obtener la cantidad de archivos dentro de nuestro zip, filename para obtener el nombre del archivo y recorreremos los archivos dentro del zip con ayuda de un ciclo y el metodo getNameIndex para obtener los nombres de los archivos.

<?php

$zip = new ZipArchive();

$zip->open('archivo-comprimido.zip');
print_r($zip);
echo "<br/>Información del archivo comprimido<br/>numFicheros: " . $zip->numFiles . "<br>";
echo "nombreFichero: " . $zip->filename . "<br>";

echo "<br/>Archivo dentro del comprimido:<br>";
for ($i=0; $i<$zip->numFiles;$i++) {
    echo $zip->getNameIndex($i)  . "<br>";
}
?>

Descomprimir un archivo comprimido en PHP

Para descomprimir un archivo comprimido sin contraseña como los que generamos con el primer codigo haremos uso del metodo extractTo.

<?php

$zip = new ZipArchive;
$ruta = "archivo-descomprimido/";

if ($zip->open('archivo-comprimido.zip') === TRUE) {
    $zip->extractTo($ruta);
    $zip->close();
    echo 'Se descomprimio el archiivo comprimido en ' . $ruta;
} else {
    echo 'Ocurrio un error al descomprimir el archivo comprimido.';
}
?>

Descomprimir un archivo comprimido con contraseña en PHP

Por último si necesitas descomprimir un archivo con contraseña el codigo anterior cambia un poco agregando el metodo setPassword antes de extraer el contenido:

<?php

$zip = new ZipArchive;
$ruta = "archivo-descomprimido/";

if ($zip->open('archivo-comprimido.zip') === TRUE) {
    if ($zip->setPassword("micontraseña"))
    {
        if (!$zip->extractTo($ruta))
            echo "Ocurrio un error al descomprimir el archivo comprimido (contraseña correcta?)";
        else
        	echo 'Se descomprimio el archivo comprimido en ' . $ruta;
    }
    $zip->close();    
} else {
    echo 'Ocurrio un error al descomprimir el archivo comprimido.';
}
?>

Como puedes ver tener un buen manejo de archivos comprimidos en PHP no es nada del otro mundo, todo lo contrario.. es realmente fácil de implementar en nuestros proyectos web.

Si tienes una duda o comentario respecto a este tutorial php no dudes en dejarme un comentario y con gusto te apoyaré a resolverla.

Etiquetas:, , , ,

Jonathan Melgoza

Soy Jonathan Melgoza, programador y blogger fanatico del desarrollo, marketing, seo, tecnología y emprendimiento. Puedes visitar mi blog de programación en mi sitio web o seguirme en Facebook, twitter, google plus o instagram.

"Trackback" Enlace desde tu web.

¡Síguenos en Facebook con un me gusta!

Este sitio web está dedicado a los Ingenieros de Sistemas en Colombia. www.ingenierodesistemas.co