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.