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
No conocía esa clase de PHP, pensé que era una lib externa pero no, buen tip