Con este script puede generar un archivo .zip usando PHP en la versión 8.
Generar ZIP
const NOMBREPROYECTO = 'nombreproyecto';
$carpeta = 'nombrecarpeta';
$zip = new ZipArchive();
// Ruta absoluta
$nombreArchivoZip = $carpeta . ".zip";
$rutaDelDirectorio = '';
if (!$zip->open($nombreArchivoZip, ZipArchive::CREATE | ZipArchive::OVERWRITE)) {
$res = 'Error abriendo ZIP en ' . $nombreArchivoZip;
} else {
// Crear un iterador recursivo que tendrá un iterador recursivo del directorio
$archivos = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($rutaDelDirectorio),
RecursiveIteratorIterator::LEAVES_ONLY
);
foreach ($archivos as $archivo) {
// No queremos agregar los directorios, pues los nombres
// de estos se agregarán cuando se agreguen los archivos
if ($archivo->isDir()) {
continue;
}
$rutaAbsoluta = $archivo->getRealPath();
$nombreArchivo = substr($rutaAbsoluta, strlen($_SERVER["DOCUMENT_ROOT"] . '/' . NOMBREPROYECTO . 'assets/uploads/'));
$zip->addFile($rutaAbsoluta, $nombreArchivo);
}
// No olvides cerrar el archivo
$resultado = $zip->close();
if ($resultado) {
$res = 'Carpeta comprimida' . $nombreArchivoZip;
} else {
$res = 'Error al crear zip';
}
}
echo $res;
Descargar Zip
public function descargarZip($nombreArchivoZip)
{
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=$nombreArchivoZip");
// Leer el contenido binario del zip y enviarlo
readfile($nombreArchivoZip);
// Si quieres puedes eliminarlo después:
unlink($nombreArchivoZip);
}