115 lines
4.0 KiB
PHP
Executable File
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è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;
|
|
}
|
|
?>
|