Sauvegarder/Exporter une base de données avec PHP

Posté par jbj le 4 sept 2007 dans PHP14 commentaires

Même si vous avez installé PhpMyAdmin sur votre serveur, il peut être utile de créer une fonction automatisant la sauvegarde de votre base de données.
Cette fonction retournera une variable contenant un dump de votre base, libre à vous de l’enregistrer sur un fichier, de l’enregistrer dans un répertoire protégé ou encore de vous l’envoyer par mail…
Note essentiellement destinée aux débutants:
Prenez garde au fait qu’une sauvegarde d’une base de données est une donnée extrèmement sensible, même si les mot de passes sont cryptés. Par conséquent, il ne faut jamais enregistrer ce fichier hors d’un répertoire protégé par mot de passe.

function dump()
{
	//Connexion à la base
	$db = mysql_connect('localhost', 'root', '');
	mysql_select_db('nom_de_la_base',$db); 

	$tables = mysql_list_tables($db);
	while ($donnees = mysql_fetch_array($tables))
	{
		$table = $donnees[0];
		$res = mysql_query(”SHOW CREATE TABLE $table”);
		if ($res)
		{
			$insertions = “”;
			$tableau = mysql_fetch_array($res);
			$tableau[1] .= “;”;
			$dumpsql[] = str_replace(”n”, “”, $tableau[1]);
			$req_table = mysql_query(”SELECT * FROM $table”);
			$nbr_champs = mysql_num_fields($req_table);
			while ($ligne = mysql_fetch_array($req_table))
			{
				$insertions .= “INSERT INTO $table VALUES(”;
				for ($i=0; $i<=$nbr_champs-1; $i++)
				{
					$insertions .= “‘” . mysql_real_escape_string($ligne[$i]) . “‘, “;
				}

				$insertions = substr($insertions, 0, -2);
				$insertions .= “);n”;
			}

			if ($insertions != “”)
			{
				$dumpsql[] = $insertions;
			}
		}
	}
	return implode(”r”, $dumpsql);
}
Si vous avez aimé cet article, aidez-moi à le promouvoir en votant pour lui sur les sites suivants: Ces icones representent les sites de bookmarking social dans lesquels vos lecteurs peuvent partager et faire découvrir vos pages.
  • del.icio.us
  • BlogMemes Fr
  • Scoopeo
  • StumbleUpon
  • Tapemoi
  • Technorati
  • Tutmarks
  • Zataz
  • Pioche
Tags:

14 commentaires

» Flux RSS des commentaires
  1. Sauvegarder/Exporter une base de donnes avec PHP…

    Mme si vous avez install PhpMyAdmin sur votre serveur, il peut tre utile de crer une fonction automatisant la sauvegarde de votre base de donnes.
    Cette fonction retournera une variable contenant un dump de votre base, libre vous de lenregistrer sur u…

  2. Bonjour,

    L’idée est bonne mais la fonction ne marche pas.
    Il manque un $ devant db dans “db = mysql_connect(’localhost’, ‘root’, ”);” ; il y a aussi une } de trop à la fin mais de toute façon, même en corrigeant ça ça ne fonctionne pas, dommage.

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/qsdfgdh/www/0.php on line 9
    Warning: implode() [function.implode]: Bad arguments. in /home/qsdfgdh/www/0.php on line 39

  3. Oulà, en effet oui il manque le $ devant db. Merci pour ta vigilance.
    Par contre pour le reste, je ne comprends pas trop dans la mesure ou j’utilise cette fonction sur un de mes sites sans jamais avoir eu aucun problème. Je regarderais plus en detail et te tiendrais au courant.

  4. OK.

    Ensuite, il faudrait développer un peu pour faire une page toute prête.
    Je pense l’utiliser sous forme de formulaire dans lequel on choisi le dossier dans lequel on souhaite l’enregistrer et/ou l’adresse mail à laquelle on souhaite l’envoyer et là le script serait parfait et facilement intégrable dans une admin de site.

  5. perso, j’insere le dump dans un textarea que je copie-colle dans un fichier texte. J’avais envie de créer directement le fichier avec un téléchargement forcé, mais je ne l’ai jamais fait par manque de temps, malheureusement.
    Je regarde demain pour le problème que tu as rencontré. Tiens moi au courant si tu fais des améliorations de ton coté :)

  6. Je viens de re-tester la fonction et elle marche impec sur mon serveur…Je ne vois pas trop ce qui peut clocher chez toi…

  7. C’est parce que je tente de faire afficher le résultat de la fonction en supprimant la fonction et en ne gardant que le contenu de la fonction pour qu’il s’exécute directement. J’enlève donc function dump() { et la dernière accolade fermante tout à la fin }. Je pensais pouvoir ainsi visualiser le résultat et voir comment le traiter pour l’enregistrer et le mettre en pièce jointe d’un mail. Visiblement, ça ne fonctionne pas et j’ai les erreurs mentionnées précédemment qui s’affichent.
    Peux-tu m’indiquer la marche à suivre pour voir le résultat de ta fonction ?

  8. Je fais comme ça pour l’afficher dans un textarea:

    $dump = dump(); //Tu récupere le résultat de la fonction dump()
    echo ‘<textarea name=”dmp” cols=”100″ rows=”15″ onclick=”this.select();”>’.$dump.’</textarea>’;

    J’espère que ça t’ira :)

  9. Copie exacte et intégrale du code de ma page de test (sauf les codes bien sûr)

    ‘.$dump.”;
    ?>
    Résultat :

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/creation/www/3.php on line 8
    Warning: implode() [function.implode]: Bad arguments. in /home/creation/www/3.php on line 38
    et le textarea en dessous

    Je pige pas…

  10. Bon…j’ai voulu tester le bbcode dans mon message précédent mais ça n’a pas marché…tu peux le supprimer si tu veux.

    En tout cas, j’ai exactement le code que tu donnes et rien n’y fait.

  11. Bizarre. Vu qu’apparemment c’est la fonction implode qui pose un problème, tu devrais essayer de la supprimmer et récupérer l’array, que tu afficherais encuite avec print_r, et voir ce que ça donne.

  12. Bonjour, j’ai essayé d’utilisé la fonction dump() que tu proposes, mais sans résultat. J’ai donc modifié cette fonction qui maintenant marche correctement. J’ai également rajouté une fonction qui enregistre directement la sauvegarde de la BD sur l’odinateur et pas sur le serveur.

    “,”    ”,$str);
    $str=str_replace(” “,”        ”,$str);
    $str=str_replace(”¡”,”¡”,$str);
    $str=str_replace(”¢”,”¢”,$str);
    $str=str_replace(”£”,”£”,$str);
    $str=str_replace(”¤”,”¤”,$str);
    $str=str_replace(”¥”,”¥”,$str);
    $str=str_replace(”¦”,”¦”,$str);
    $str=str_replace(”§”,”§”,$str);
    $str=str_replace(”¨”,”¨”,$str);
    $str=str_replace(”©”,”©”,$str);
    $str=str_replace(”ª”,”ª”,$str);
    $str=str_replace(”«”,”«”,$str);
    $str=str_replace(”¬”,”¬”,$str);
    $str=str_replace(”­”,”­”,$str);
    $str=str_replace(”®”,”®”,$str);
    $str=str_replace(”¯”,”¯”,$str);
    $str=str_replace(”°”,”°”,$str);
    $str=str_replace(”±”,”±”,$str);
    $str=str_replace(”²”,”²”,$str);
    $str=str_replace(”³”,”³”,$str);
    $str=str_replace(”´”,”´”,$str);
    $str=str_replace(”µ”,”µ”,$str);
    $str=str_replace(”¶”,”¶”,$str);
    $str=str_replace(”·”,”·”,$str);
    $str=str_replace(”¸”,”¸”,$str);
    $str=str_replace(”¹”,”¹”,$str);
    $str=str_replace(”º”,”º”,$str);
    $str=str_replace(”»”,”»”,$str);
    $str=str_replace(”¼”,”¼”,$str);
    $str=str_replace(”½”,”½”,$str);
    $str=str_replace(”¾”,”¾”,$str);
    $str=str_replace(”¿”,”¿”,$str);
    $str=str_replace(”À”,”À”,$str);
    $str=str_replace(”Á”,”Á”,$str);
    $str=str_replace(””,””,$str);
    $str=str_replace(”Ô,”Ô,$str);
    $str=str_replace(”Ä”,”Ä”,$str);
    $str=str_replace(”Å”,”Å”,$str);
    $str=str_replace(”Æ”,”Æ”,$str);
    $str=str_replace(”Ç”,”Ç”,$str);
    $str=str_replace(”È”,”È”,$str);
    $str=str_replace(”É”,”É”,$str);
    $str=str_replace(”Ê”,”Ê”,$str);
    $str=str_replace(”Ë”,”Ë”,$str);
    $str=str_replace(”Ì”,”Ì”,$str);
    $str=str_replace(”Í”,”Í”,$str);
    $str=str_replace(”Δ,”Δ,$str);
    $str=str_replace(”Ï”,”Ï”,$str);
    $str=str_replace(”Д,”Д,$str);
    $str=str_replace(”Ñ”,”Ñ”,$str);
    $str=str_replace(”Ò”,”Ò”,$str);
    $str=str_replace(”Ó”,”Ó”,$str);
    $str=str_replace(”Ô”,”Ô”,$str);
    $str=str_replace(”Õ”,”Õ”,$str);
    $str=str_replace(”Ö”,”Ö”,$str);
    $str=str_replace(”×”,”×”,$str);
    $str=str_replace(”Ø”,”Ø”,$str);
    $str=str_replace(”Ù”,”Ù”,$str);
    $str=str_replace(”Ú”,”Ú”,$str);
    $str=str_replace(”Û”,”Û”,$str);
    $str=str_replace(”Ü”,”Ü”,$str);
    $str=str_replace(”Ý”,”Ý”,$str);
    $str=str_replace(”Þ”,”Þ”,$str);
    $str=str_replace(”ß”,”ß”,$str);
    $str=str_replace(”à”,”à”,$str);
    $str=str_replace(”á”,”á”,$str);
    $str=str_replace(”â”,”â”,$str);
    $str=str_replace(”ã”,”ã”,$str);
    $str=str_replace(”ä”,”ä”,$str);
    $str=str_replace(”å”,”å”,$str);
    $str=str_replace(”æ”,”æ”,$str);
    $str=str_replace(”ç”,”ç”,$str);
    $str=str_replace(”è”,”è”,$str);
    $str=str_replace(”é”,”é”,$str);
    $str=str_replace(”ê”,”ê”,$str);
    $str=str_replace(”ë”,”ë”,$str);
    $str=str_replace(”ì”,”ì”,$str);
    $str=str_replace(”í”,”í”,$str);
    $str=str_replace(”î”,”î”,$str);
    $str=str_replace(”ï”,”ï”,$str);
    $str=str_replace(”ð”,”ð”,$str);
    $str=str_replace(”ñ”,”ñ”,$str);
    $str=str_replace(”ò”,”ò”,$str);
    $str=str_replace(”ó”,”ó”,$str);
    $str=str_replace(”ô”,”ô”,$str);
    $str=str_replace(”õ”,”õ”,$str);
    $str=str_replace(”ö”,”ö”,$str);
    $str=str_replace(”÷”,”÷”,$str);
    $str=str_replace(”ø”,”ø”,$str);
    $str=str_replace(”ù”,”ù”,$str);
    $str=str_replace(”ú”,”ú”,$str);
    $str=str_replace(”û”,”û”,$str);
    $str=str_replace(”ü”,”ü”,$str);
    $str=str_replace(”ý”,”ý”,$str);
    $str=str_replace(”þ”,”þ”,$str);
    $str=str_replace(”ÿ”,”ÿ”,$str);
    return $str;

    }

    function dump()
    {
    include(”parameters.php”); //mes variables globales sont dans ce fichier
    include(”connection.php”); // c’est le fichier pour se connecter à la base de données
    // A cette étape, on est donc connecté à la BD
    $months=array(”Janvier”,”Février”,”Mars”,”Avril”,”Mai”,”Juin”,”Juillet”,”Août”,”Septembre”,”Octobre”,”Novembre”,”Décembre”);
    $jour=array(”Dimanche”,”Lundi”,”Mardi”,”Mercredi”,”Jeudi”,”Vendredi”,”Samedi”);

    $dumpsql[] = “– phpMyAdmin SQL Dump”;
    $dumpsql[] = “– version 2.7.0-pl1″;
    $dumpsql[] = “– http://www.phpmyadmin.net“;
    $dumpsql[] = “– “;
    $dumpsql[] = “– Serveur: 10.0.5.163″;
    $dat=”– Généré le : “.$jour[date("w")].” “.date(”d”).” “.$months[date("n")-1].” “.date(”Y”).” à “.date(”G”).”:”.date(”i”);
    $dumpsql[] = $dat;
    $dumpsql[] = “– Version du serveur: 4.99.99″;
    $dumpsql[] = “– Version de PHP: 4.4.1″;
    $dumpsql[] = “– “;
    $dumpsql[] = “– Base de données: `$dbName`”;
    $dumpsql[] = “– “;
    $dumpsql[] = “”;
    $dumpsql[] = “– ——————————————————–”;
    $tables = mysql_query(”SHOW TABLES”,$db);
    while ($donnees = mysql_fetch_array($tables))
    {
    $table = $donnees[0];
    $dumpsql[] = “”;
    $dumpsql[] = “– “;
    $dumpsql[] = “– Structure de la table `$table`”;
    $dumpsql[] = “– “;
    $dumpsql[] = “”;
    $res = mysql_query(”SHOW CREATE TABLE $table”);
    if ($res)
    {
    $insertions = “”;
    $tableau = mysql_fetch_array($res);
    $tableau[1] .= “;”;
    $dumpsql[] = $tableau[1];
    $dumpsql[] = “”;
    $dumpsql[] = “– “;
    $dumpsql[] = “– Contenu de la table `$table`”;
    $dumpsql[] = “– “;
    $dumpsql[] = “”;
    $req_table = mysql_query(”SELECT * FROM $table”);
    $nbr_champs = mysql_num_fields($req_table);
    while ($ligne = mysql_fetch_array($req_table))
    {
    $insertions .= “INSERT INTO `$table` VALUES (”;
    for ($i=0; $i

  13. pardon, en copiant, le début n’a pas été sélectionné.

  14. function dump()
    {
    include(”parameters.php”); //mes variables globales sont dans ce fichier
    include(”connection.php”); // c’est le fichier pour se connecter à la base de données
    // A cette étape, on est donc connecté à la BD
    $months=array(”Janvier”,”Février”,”Mars”,”Avril”,”Mai”,”Juin”,”Juillet”,”Août”,”Septembre”,”Octobre”,”Novembre”,”Décembre”);
    $jour=array(”Dimanche”,”Lundi”,”Mardi”,”Mercredi”,”Jeudi”,”Vendredi”,”Samedi”);

    $dumpsql[] = “– phpMyAdmin SQL Dump”;
    $dumpsql[] = “– version 2.7.0-pl1″;
    $dumpsql[] = “– http://www.phpmyadmin.net“;
    $dumpsql[] = “– “;
    $dumpsql[] = “– Serveur: 10.0.5.163″;
    $dat=”– Généré le : “.$jour[date("w")].” “.date(”d”).” “.$months[date("n")-1].” “.date(”Y”).” à “.date(”G”).”:”.date(”i”);
    $dumpsql[] = $dat;
    $dumpsql[] = “– Version du serveur: 4.99.99″;
    $dumpsql[] = “– Version de PHP: 4.4.1″;
    $dumpsql[] = “– “;
    $dumpsql[] = “– Base de données: `$dbName`”;
    $dumpsql[] = “– “;
    $dumpsql[] = “”;
    $dumpsql[] = “– ——————————————————–”;
    $tables = mysql_query(”SHOW TABLES”,$db);
    while ($donnees = mysql_fetch_array($tables))
    {
    $table = $donnees[0];
    $dumpsql[] = “”;
    $dumpsql[] = “– “;
    $dumpsql[] = “– Structure de la table `$table`”;
    $dumpsql[] = “– “;
    $dumpsql[] = “”;
    $res = mysql_query(”SHOW CREATE TABLE $table”);
    if ($res)
    {
    $insertions = “”;
    $tableau = mysql_fetch_array($res);
    $tableau[1] .= “;”;
    $dumpsql[] = $tableau[1];
    $dumpsql[] = “”;
    $dumpsql[] = “– “;
    $dumpsql[] = “– Contenu de la table `$table`”;
    $dumpsql[] = “– “;
    $dumpsql[] = “”;
    $req_table = mysql_query(”SELECT * FROM $table”);
    $nbr_champs = mysql_num_fields($req_table);
    while ($ligne = mysql_fetch_array($req_table))
    {
    $insertions .= “INSERT INTO `$table` VALUES (”;
    for ($i=0; $i

Commenter