Trabajo con archivos ZIP en PHP: ZipArchive y bibliotecas de compresión

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción al trabajo con archivos ZIP en PHP

Los archivos ZIP siguen siendo uno de los formatos de compresión de datos más populares en el desarrollo web. En PHP, el trabajo con ellos se implementa de forma nativa a través de la extensión Zip, que proporciona la potente clase ZipArchive. Esto permite a los desarrolladores crear, leer, actualizar y extraer archivos de archivos comprimidos fácilmente, sin necesidad de instalar bibliotecas de terceros adicionales.



En el portal educativo PythonLib.ru analizaremos todos los aspectos del trabajo con ZIP en PHP: desde operaciones básicas hasta técnicas avanzadas, incluyendo compresión con contraseña, manejo de grandes volúmenes de datos e integración con el almacenamiento en búfer de salida.



Instalación y verificación de la extensión Zip

La clase ZipArchive está disponible en PHP desde la versión 5.2.0. Para usarla, es necesario asegurarse de que la extensión zip esté habilitada en la configuración del servidor. Esto se puede verificar con la función phpinfo() o con un script simple:



<?phpif (class_exists('ZipArchive')) {    echo "La extensión Zip está disponible";} else {    echo "La extensión Zip no está instalada";}?>


En la mayoría de los hosting modernos, la extensión ya está preinstalada. Si no es así, contacte al administrador del servidor o realice la instalación a través del gestor de paquetes (por ejemplo, apt-get install php-zip para Debian/Ubuntu).



Operaciones básicas con ZipArchive

1. Creación de un nuevo archivo ZIP

Para crear un archivo comprimido se utiliza el método open() con la bandera ZipArchive::CREATE. Veamos un ejemplo básico:



<?php$zip = new ZipArchive();$filename = 'example.zip';

if ($zip->open($filename, ZipArchive::CREATE) === TRUE) { // Agregar archivo desde una cadena $zip->addFromString('hello.txt', '¡Hola, mundo!'); // Agregar un archivo existente $zip->addFile('/path/to/image.jpg', 'images/photo.jpg'); // Agregar un directorio vacío $zip->addEmptyDir('documents'); $zip->close(); echo "Archivo comprimido creado exitosamente";} else { echo "Error al crear el archivo comprimido";}?>


Tenga en cuenta: el segundo parámetro de addFile() define la ruta dentro del archivo comprimido, lo que permite organizar la estructura de carpetas.



2. Descompresión de un archivo ZIP

Para extraer todos los archivos se utiliza el método extractTo():



<?php$zip = new ZipArchive();if ($zip->open('example.zip') === TRUE) {    $zip->extractTo('/destination/folder/');    $zip->close();    echo "Archivo comprimido descomprimido";} else {    echo "No se pudo abrir el archivo comprimido";}?>


También se puede extraer solo un archivo específico, indicando su ruta interna como segundo argumento:

$zip->extractTo('/destination/', 'images/photo.jpg');


3. Lectura del contenido del archivo comprimido sin descomprimir

A veces solo se necesita ver la lista de archivos dentro del archivo comprimido:



<?php$zip = new ZipArchive();if ($zip->open('archive.zip') === TRUE) {    for ($i = 0; $i < $zip->numFiles; $i++) {        $stat = $zip->statIndex($i);        echo "Archivo: " . $stat['name'] . " (tamaño: " . $stat['size'] . " bytes)";    }    $zip->close();}?>


El método statIndex() devuelve un array con información: nombre, tamaño, fecha de modificación, CRC32 y otros metadatos.



Funcionalidades avanzadas

Compresión con contraseña (PHP 7.2+)

A partir de PHP 7.2, ZipArchive admite cifrado con contraseña mediante el algoritmo AES-256:



<?php$zip = new ZipArchive();if ($zip->open('protected.zip', ZipArchive::CREATE) === TRUE) {    $zip->setPassword('supersecret');    $zip->addFile('document.pdf');    // Habilitamos el cifrado para el último archivo agregado    $zip->setEncryptionName('document.pdf', ZipArchive::EM_AES_256);    $zip->close();    echo "Archivo comprimido cifrado creado                    

Recommendations