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

108 lines
4.1 KiB
PHP
Executable File

<?php
$nomFicAppelant = basename(__FILE__);
function dumpMySQL($host, $user, $pass, $bdd, $includePathVar) {
$localDebug = 0;
$mesg = '';
if($localDebug == 1) $mesg .= "<br><b>Je passe dans dumpMySQL</b>";
ini_set('memory_limit', '-1');
set_time_limit(0);
if($localDebug == 1) ini_set('display_errors', 1);
if($localDebug == 1) ini_set('display_startup_errors', 1);
if($localDebug == 1) error_reporting(E_ALL);
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
$tablesExportées = 0;
// Connexion PDO
try {
$connexion = new PDO("mysql:host=$host;dbname=$bdd;charset=utf8", $user, $pass);
$connexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("Erreur de connexion PDO : " . $e->getMessage());
}
$repD = $includePathVar. '/sauvegardes/dump.complet-' .$today. '.sql';
$fichierDump = fopen($repD, "wb");
if (!$fichierDump) {die("Erreur : Impossible d'ouvrir le fichier pour écriture. "); }
$entete = "-- Export de la base $bdd au $today -- \n ";
fwrite($fichierDump, $entete);
$mesg .= $entete;
// Récupérer les tables
$listeTablesStmt = $connexion->query("SHOW TABLES");
$listeTables = $listeTablesStmt->fetchAll(PDO::FETCH_COLUMN);
if($localDebug == 1) $mesg .= "<br> Tables incluses : ";
foreach ($listeTables as $nomTable) {
if($localDebug == 1) $mesg .= " | " .$nomTable;
// Sauvegarde de la structure
fwrite($fichierDump, "-- Structure de la table `$nomTable`\n");
fwrite($fichierDump, "DROP TABLE IF EXISTS `$nomTable`;\n");
$listeCreationsTablesStmt = $connexion->query("SHOW CREATE TABLE $nomTable");
$creationTable = $listeCreationsTablesStmt->fetch(PDO::FETCH_ASSOC);
if ($creationTable) {
fwrite($fichierDump, $creationTable['Create Table'] . ";\n\n");
}
// Sauvegarde des données
$donneesStmt = $connexion->query("SELECT * FROM $nomTable");
$donnees = $donneesStmt->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[] = "'" . $connexion->quote($valeur) . "'";
}
}
fwrite($fichierDump, "INSERT INTO `$nomTable` VALUES (" . implode(", ", $valeurs) . ");\n");
}
fwrite($fichierDump, "\n");
$tablesExportées++;
}
fclose($fichierDump);
$connexion = null;
$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 : $tablesExportées
-- 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 : $tablesExportées
<br>Temps écoulé : $elapsedTime secondes
<br>Taille du fichier dump : $fileSize Mo
<br>-------------------------------<br>
";
$mesg .= '<br>Export de la base <b>' .$bdd. '</b> réalisée avec succès. ';
if ($localDebug == 1) $mesg .= '<br>Les données sont dans le fichier : <a href="' .$repD. '"><br>Editer le fichier</a><br>' .$entete. '<br>' .$stats;
return $mesg;
}
?>