Estaba haciendo un gestor documental y me ha tocado hacer la típica funcionalidad de tener que generar un zip con documentos para que el usuario los descargue, y una vez descargado se elimine el zip para que no sea accesible por el público.
Para ello lo primero es generar el zip:
// nombre del zip a generar (único por si coincide con otra descarga)
$filename = uniqid('descarga') . '.zip';
// ruta donde vamos a generar el zip
$destination = str_replace('CARPETA_ACTUAL', 'CARPETA_DE_DESTINO/' . $ filename, __DIR__);
$zip = new ZipArchive;
if ($zip->open($destination, ZipArchive::CREATE) === TRUE) {
// añadimos los ficheros al zip
$zip->addFile('data.txt', 'zipeado.txt');
$zip->close();
}
Y luego procedemos a forzar la descarga y borrarlo
if(file_exists($destination)){
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', filemtime($destination)) . ' GMT');
header('Content-Type: application/force-download');
header('Content-Disposition: inline; filename="'.$ filename.'"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($destination));
header('Connection: close');
readfile($destination);
ignore_user_abort(true);
unlink($destination);
}
0 Comentarios.