109 lines
3.5 KiB
PHP
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>";
|
|
}
|
|
?>
|