Files
MarcosFlorSalcedo 8ec55e40fc 1ra Versión
2026-07-14 18:24:27 -03:00

109 lines
3.5 KiB
PHP

<?php
set_time_limit(0);
require_once 'conexion.php';
// Rutas base de tu proyecto
$rutaProyecto = "C:\\xampp\\htdocs\\TP-Taller\\ProyectoTaller\\";
$carpetaDestino = $rutaProyecto . "backups\\";
$mysqldump = "C:\\xampp\\mysql\\bin\\mysqldump.exe";
$diasDeRetencion = 30;
// --- GENERACIÓN DEL BACKUP SQL ---
$fecha = date('Y-m-d_H-i-s');
$nombreArchivoSql = "bd_cap1tan_" . $fecha . ".sql";
$rutaSql = $carpetaDestino . $nombreArchivoSql;
$comando = "$mysqldump -h $host -u $user $db > \"$rutaSql\" 2>&1";
exec($comando, $salida, $resultado);
if ($resultado !== 0) {
echo "<h2 style='color: red;'>Error al generar la base de datos. Abortando.</h2>";
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 "<h2 style='color: green;'>¡Éxito! Backup COMPLETO generado correctamente.</h2>";
echo "<p>Ruta: <b>" . $rutaZip . "</b></p>";
} else {
echo "<h2 style='color: red;'>Error al intentar crear el archivo ZIP.</h2>";
}
// --- 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 "<hr>";
if ($borrados > 0) {
echo "<p>Limpieza completada: Se eliminaron $borrados backup(s) viejo(s).</p>";
} else {
echo "<p>Mantenimiento al día: Ningún backup supera los $diasDeRetencion días.</p>";
}
?>