$ruta_sql_temporal";
system($comando, $resultado_sql);
// 2. Si el SQL se generó correctamente, procedemos a empaquetar archivos de configuración y recursos
if ($resultado_sql === 0 && file_exists($ruta_sql_temporal)) {
$zip = new ZipArchive();
if ($zip->open($ruta_zip_final, ZipArchive::CREATE) === TRUE) {
// A. Añadir el script SQL de la Base de Datos al ZIP
$zip->addFile($ruta_sql_temporal, $nombre_sql);
// B. Añadir el archivo crítico de configuración técnica (db.php)
if (file_exists("../db.php")) {
$zip->addFile("../db.php", "config/db.php");
}
// C. Añadir de forma recursiva la carpeta de imágenes generales de diseño (../imagenes)
$ruta_imagenes = "../imagenes";
if (file_exists($ruta_imagenes)) {
$archivos_imagenes = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($ruta_imagenes, RecursiveDirectoryIterator::SKIP_DOTS),
RecursiveIteratorIterator::SELF_FIRST
);
foreach ($archivos_imagenes as $item) {
$ruta_real = $item->getRealPath();
$ruta_relativa_zip = "imagenes_sitio/" . substr($ruta_real, strlen(realpath($ruta_imagenes)) + 1);
if ($item->isDir()) {
$zip->addEmptyDir($ruta_relativa_zip);
} else {
$zip->addFile($ruta_real, $ruta_relativa_zip);
}
}
}
// Añadir de forma recursiva la carpeta de fotos de productos cargados (../img)
$ruta_img_productos = "../img";
if (file_exists($ruta_img_productos)) {
$archivos_productos = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($ruta_img_productos, RecursiveDirectoryIterator::SKIP_DOTS),
RecursiveIteratorIterator::SELF_FIRST
);
foreach ($archivos_productos as $item) {
$ruta_real = $item->getRealPath();
// Lo guardamos estructurado bajo una carpeta propia dentro del ZIP
$ruta_relativa_zip = "imagenes_productos/" . substr($ruta_real, strlen(realpath($ruta_img_productos)) + 1);
if ($item->isDir()) {
$zip->addEmptyDir($ruta_relativa_zip);
} else {
$zip->addFile($ruta_real, $ruta_relativa_zip);
}
}
}
// Cerramos y guardamos definitivamente el archivo ZIP
$zip->close();
// Borramos el archivo .sql suelto temporal para no duplicar espacio en el disco duro
unlink($ruta_sql_temporal);
header("Location: backup.php?status=success&file=$nombre_zip");
} else {
header("Location: backup.php?status=error_zip");
}
} else {
header("Location: backup.php?status=error_sql");
}
exit();
}
if (isset($_GET['status'])) {
if ($_GET['status'] === 'success') {
$file = htmlspecialchars($_GET['file']);
$mensaje = "¡Copia de seguridad del sistema completo generada con éxito! Archivo: $file";
$tipo_mensaje = "success";
} elseif ($_GET['status'] === 'error_sql') {
$mensaje = "Error al generar el volcado SQL de la Base de Datos. Verifique la ruta de mysqldump en XAMPP.";
$tipo_mensaje = "error";
} elseif ($_GET['status'] === 'error_zip') {
$mensaje = "Error al comprimir el archivo ZIP. Asegúrese de que PHP tenga extensiones activas y permisos de escritura.";
$tipo_mensaje = "error";
}
}
// Escaneamos la carpeta buscando únicamente los archivos ZIP generados
$archivos_guardados = array_diff(scandir($carpeta_backups), array('.', '..'));
$archivos_guardados = array_filter($archivos_guardados, function($archivo) {
return pathinfo($archivo, PATHINFO_EXTENSION) === 'zip';
});
rsort($archivos_guardados);
?>
Copia de Seguridad - La Pecosa
Copias de seguridad (Backup integral)
Respaldar sistema completo e infraestructura
Al hacer clic en el botón se empaquetará un archivo comprimido .ZIP conteniendo el volcado SQL de la base de datos (tablas, pedidos, menú), los archivos de conexión y configuración del sistema, junto con la totalidad de imágenes y recursos multimedia subidos por la administración de La Pecosa.
Respaldos integrales guardados en el servidor
Nombre del Archivo Completo
Tipo de Paquete
Ubicación en Servidor
Acción
No se encontraron paquetes comprimidos de seguridad.