108 lines
4.1 KiB
PHP
Executable File
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;
|
|
}
|
|
?>
|