\"$rutaSql\" 2>&1"; exec($comando, $salida, $resultado); if ($resultado !== 0) { echo "

Error al generar la base de datos. Abortando.

"; exit; } // --- EMPAQUETADO ZIP --- $nombreArchivoZip = "backup_completo_" . $fecha . ".zip"; $rutaZip = $carpetaDestino . $nombreArchivoZip; $zip = new ZipArchive(); if ($zip->open($rutaZip, ZipArchive::CREATE) === TRUE) { // Guardamos la base de datos dentro del ZIP $zip->addFile($rutaSql, $nombreArchivoSql); // Guardamos el archivo de conexión $rutaConexion = $rutaProyecto . "php\\conexion.php"; if (file_exists($rutaConexion)) { $zip->addFile($rutaConexion, "php/conexion.php"); } // Guardamos el bot de Python $rutaBot = $rutaProyecto . "python\\Enviar_WSP.py"; if (file_exists($rutaBot)) { $zip->addFile($rutaBot, "python/Enviar_WSP.py"); } // Guardamos la carpeta uploads completa $rutaUploads = $rutaProyecto . "uploads\\"; // Verificamos si la carpeta existe antes de intentar abrirla if (is_dir($rutaUploads)) { // El sabueso que busca todos los archivos dentro de la carpeta $archivos = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($rutaUploads), RecursiveIteratorIterator::LEAVES_ONLY ); foreach ($archivos as $nombre => $archivo) { // Saltamos las carpetas vacías o los directorios del sistema (. y ..) if (!$archivo->isDir()) { // Obtenemos la ruta real del archivo en Windows $rutaReal = $archivo->getRealPath(); // Calculamos la ruta relativa para que adentro del ZIP quede ordenado en "uploads/comprobantes/foto.jpg" $rutaRelativa = "uploads/" . substr($rutaReal, strlen($rutaUploads)); // Reemplazamos las barras invertidas de Windows por barras normales para el ZIP $rutaRelativa = str_replace('\\', '/', $rutaRelativa); // Añadimos el archivo al ZIP $zip->addFile($rutaReal, $rutaRelativa); } } } $zip->close(); // Borramos el archivo .sql suelto unlink($rutaSql); echo "

¡Éxito! Backup COMPLETO generado correctamente.

"; echo "

Ruta: " . $rutaZip . "

"; } else { echo "

Error al intentar crear el archivo ZIP.

"; } // --- AUTO-LIMPIEZA DE BACKUPS VIEJOS --- $archivosZip = glob($carpetaDestino . "*.zip"); $fechaActual = time(); $borrados = 0; foreach ($archivosZip as $archivo) { if (is_file($archivo)) { $diasDeAntiguedad = ($fechaActual - filemtime($archivo)) / (60 * 60 * 24); if ($diasDeAntiguedad >= $diasDeRetencion) { unlink($archivo); $borrados++; } } } echo "
"; if ($borrados > 0) { echo "

Limpieza completada: Se eliminaron $borrados backup(s) viejo(s).

"; } else { echo "

Mantenimiento al día: Ningún backup supera los $diasDeRetencion días.

"; } ?>