$ruta_absoluta, 'nombre' => $row['nombre_archivo'] ]; } } if (empty($archivos)) { http_response_code(404); echo "No hay archivos válidos para comprimir."; exit; } $zip_file = tempnam(sys_get_temp_dir(), 'expediente_') . '.zip'; $zip = new ZipArchive(); if ($zip->open($zip_file, ZipArchive::CREATE) !== true) { http_response_code(500); echo "No se pudo crear el archivo ZIP."; exit; } foreach ($archivos as $a) { $zip->addFile($a['ruta'], $a['nombre']); } $zip->close(); header('Content-Type: application/zip'); header('Content-Disposition: attachment; filename="expediente_' . $id_solicitud . '.zip"'); header('Content-Length: ' . filesize($zip_file)); readfile($zip_file); unlink($zip_file); exit; } function descargar_zip_pedimento($pedimento_id) { if (!isset($_SESSION['usuario_id'])) { http_response_code(403); echo "No autorizado."; exit; } $conn = getConnection(); ensure_expediente_schema($conn); $id_importador = $_SESSION['usuario_id']; // Validar propiedad $chk = sqlsrv_query($conn, "SELECT 1 FROM pedimentos WHERE id = ? AND usuario_id = ?", [$pedimento_id, $id_importador]); if (!$chk || !sqlsrv_fetch($chk)) { http_response_code(404); echo "No autorizado"; exit; } if ($chk) sqlsrv_free_stmt($chk); $stmt = sqlsrv_query($conn, "SELECT nombre_archivo, ruta_archivo FROM expediente_archivos WHERE pedimento_id = ?", [$pedimento_id]); if (!$stmt) { http_response_code(500); echo "Error al consultar archivos."; exit; } $archivos = []; while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) { $ruta_absoluta = __DIR__ . '/../../' . $row['ruta_archivo']; if (file_exists($ruta_absoluta)) { $archivos[] = [ 'ruta' => $ruta_absoluta, 'nombre' => $row['nombre_archivo'] ]; } } sqlsrv_free_stmt($stmt); if (empty($archivos)) { http_response_code(404); echo "No hay archivos válidos para comprimir."; exit; } $zip_file = tempnam(sys_get_temp_dir(), 'expediente_') . '.zip'; $zip = new ZipArchive(); if ($zip->open($zip_file, ZipArchive::CREATE) !== true) { http_response_code(500); echo "No se pudo crear el archivo ZIP."; exit; } foreach ($archivos as $a) { $zip->addFile($a['ruta'], $a['nombre']); } $zip->close(); header('Content-Type: application/zip'); header('Content-Disposition: attachment; filename="expediente_pedimento_' . $pedimento_id . '.zip"'); header('Content-Length: ' . filesize($zip_file)); readfile($zip_file); unlink($zip_file); exit; }