Como comprimir y descargar imágenes en un fichero .zip

Rate this post

En multitud de webs vemos como existe la posibilidad de descargar imágenes comprimidas en un fichero.zip, pues lejos de parecer difícil se puede hacer con la clase ZipArchive desde la versión 5 de php.

Con esta pequeña entrada paso a explicar como realizarlo.

Lo primeros que haremos es crear un array con las imágenes a comprimir

// Creamos y declaramos el array con los los ficheros
$ficheros = array(
    '1.jpg',
    '2.jpg',
    '3.jpg'
);

A continuación instanciamos la clase ZipArchive con el nombre del fichero y abrimos el flujo

// Declaramos el nombre del archivo comprimido
$nombre_zip = 'images.zip';

// Instanciamos la clase, esta viene en el paquete de PHP
$mizip = new ZipArchive();
$mizip->open($nombre_zip, ZipArchive::CREATE);

Mediante un bucle añadimos las imágenes del array y cerramos el flujo para crear el fichero .zip

// Bucle para agregar los archivos a comprimir
foreach ($ficheros as $fichero){
      $mizip->addFile($fichero);
}

$mizip->close();

Y por ultimo creamos las cabeceras para descargar el fichero y lo eliminamos del servidor

// Generar la descarga en el navegador
header('Content-Type: application/zip');
header('Content-disposition: attachment; filename='.$nombre_zip);
header('Content-Length: ' . filesize($nombre_zip));
readfile($nombre_zip);

// Eliminamos el archivo que se creo en nuestro servidor
unlink($nombre_zip);
}

Con esto ya descargaríamos el fichero, pero para darle una vuelta de tuerca mas, os pongo un ejemplo donde se visualizan las imágenes y se descarga el fichero comprimido a través de un botón con el codigo siguiente.

<?php
// validamos el envio el formualrio
if(isset($_POST["create_zip"])){

// Creamos y declaramos el array con los los ficheros
$ficheros = array(
    '1.jpg',
    '2.jpg',
    '3.jpg'
);

// Declaramos el nombre del archivo comprimido
$nombre_zip = 'images.zip';

// Instanciamos la clase, esta viene en el paquete de PHP
$mizip = new ZipArchive();
$mizip->open($nombre_zip, ZipArchive::CREATE);

// Bucle para agregar los archivos a comprimir
foreach ($ficheros as $fichero){
      $mizip->addFile($fichero);
}

$mizip->close();

// Generar la descarga en el navegador
header('Content-Type: application/zip');
header('Content-disposition: attachment; filename='.$nombre_zip);
header('Content-Length: ' . filesize($nombre_zip));
readfile($nombre_zip);

// Eliminamos el archivo que se creo en nuestro servidor
unlink($nombre_zip);
}
?>

<!doctype html>
<html lang="es">

<body>

<p><img src="1.jpg" width="400"></p>
<p><img src="2.jpg" width="400"></p>
<p><img src="3.jpg" width="400"></p>

<form action="" method="post">
<input name="create_zip" type="submit" value="Descargar imagenes">
</form>

</body>

</html>

Para ver el ejemplo lo puedes descargar desde esta url: https://programacionconphp.com/dev/crearZip/crearZip.zip

Deja un comentario