alpha_full/admin/publier/scriptsExports/functionDump.php
2026-04-06 22:58:51 +02:00

115 lines
4.0 KiB
PHP
Executable File

<?php
function exportDansFichier($dumpName) {
// -----------------------------------------------------
// Init var
// -----------------------------------------------------
$fichierDump = '';
$mesg = '';
global $bdd1;
global $idPdo;
global $tablesListe;
global $export_tag;
date_default_timezone_set('Europe/Paris');
$dateTimeObj = new DateTime('now', new DateTimeZone('Europe/Paris'));
$today = IntlDateFormatter::formatObject($dateTimeObj, "y-MM-dd_HH-mm", 'fr');
$startTime = microtime(true); // Démarrage du timer
if (isset($debug[1]) && $debug[1] == '1' ) $mesg .= "Export de la base " .$bdd1. " au " .$today. "\n";
$repD = $dumpName. 'Dump-' .$today. '.sql';
$_SESSION['fichierExport'] = $repD;
if (isset($debug[1]) && $debug[1] == '1' ) $mesg .= "fichierDump " .$repD. " <br>";
// -----------------------------------------------------
// Ouverture du fichier en écriture
// -----------------------------------------------------
$fichierDump = fopen($repD, "wb");
if (!$fichierDump) {
die("Erreur : Impossible d'ouvrir le fichier pour écriture. ");
}
$entete = "-- -----------------------------\n-- Export de la base $bdd1 au $today\n-- ----------------------------- \n";
fwrite($fichierDump, $entete);
// spinner vivant
ob_flush();
flush();
// export
$n = 0; // Initialisation du compteur de tables exportées
foreach ($tablesListe as $nomTable) {
if (isset($debug[1]) && $debug[1] == '1' ) $mesg .= " | " .$nomTable;
// Sauvegarde de la structure
fwrite($fichierDump, "-- Structure de la table `$nomTable`\n");
fwrite($fichierDump, "DROP TABLE IF EXISTS `$nomTable`;\n");
// Exécuter la requête SHOW CREATE TABLE via PDO
$stmt = $idPdo->prepare("SHOW CREATE TABLE $nomTable");
$stmt->execute();
$creationTable = $stmt->fetch(PDO::FETCH_ASSOC);
if ($creationTable) {
fwrite($fichierDump, $creationTable['Create Table'] . ";\n\n");
}
// Sauvegarde des données
$stmt = $idPdo->prepare("SELECT * FROM $nomTable");
$stmt->execute();
$donnees = $stmt->fetchAll(PDO::FETCH_ASSOC);
fwrite($fichierDump, "-- Données de la table `$nomTable`\n");
foreach ($donnees as $mysqlValue) {
$valeurs = [];
foreach ($mysqlValue as $valeur) {
if (is_null($valeur)) {
$valeurs[] = "NULL";
} else {
$valeurs[] = "" . $idPdo->quote($valeur) . ""; // Utilisation de PDO::quote pour échapper les valeurs
}
}
fwrite($fichierDump, "INSERT INTO `$nomTable` VALUES (" . implode(", ", $valeurs) . ");\n");
}
fwrite($fichierDump, "\n");
$n++; // Incrémenter le nombre de tables exportées
}
fclose($fichierDump);
$endTime = microtime(true); // Fin du timer
$elapsedTime = round($endTime - $startTime, 2); // Temps écoulé en secondes
$fileSize = round(filesize($repD) / 1024 / 1024, 2); // Taille en Mo
// Affichage des statistiques en commentaire à la fin du fichier
$stats1 = "
-- -----------------------------
-- RÉSUMÉ DE L'EXPORT
-- -----------------------------
-- Nombre de tables exportées : $n
-- Temps écoulé : $elapsedTime secondes
-- Taille du fichier dump : $fileSize Mo
-- -----------------------------
";
file_put_contents($repD, $stats1, FILE_APPEND);
// Affichage des statistiques à l'écran
$stats = "Nombre de tables exportées : $n
<br>Temps écoulé : $elapsedTime secondes
<br>Taille du fichier dump : $fileSize Mo
<br>-------------------------------<br>
";
// -----------------------------------------------------
// Message a l'écran
// -----------------------------------------------------
if (isset($debug[1]) && $debug[1] == '1' ) {
$mesg .= 'Export ' .$export_tag. ' réalisé avec succ&#232;s. ';
$mesg .= '<br>Les données sont dans le fichier : <u><a href="' .$repD. '"> ' .$repD. '<br>Editer le fichier</a></u><br>' .$entete. '<br>' .$stats;
}
return $mesg;
}
?>