Dump bdd mysql avec php

harderpod Messages postés 326 Date d'inscription   Statut Membre Dernière intervention   -  
harderpod Messages postés 326 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour, voila après plusieurs de recherche avec google et forum en veut tu en voila ! après plusieurs litre de café dans la semaine, je me décide de poser ma question puisque je n'y arrive pas.

je voudrais pour une application php en local, Que l'utilisateur puisse faire une sauvegarde de sa base de donner facilement.

jusqu'à présent tous mes essais retourne un fichier vide. voici le script que j'utilise a savoir que j'ai fais une copie de mysqldump.exe a la racine du site, puisque en utilisant celui ce trouvant dans programme files sa ne fonctionne pas non plus.
De ce que j'ai compris a cause de l'espace entre programme et files, on doit écrire c:\PROGAM~1\wamp ...........
même comme sa fonctionne pas non plus.

<?php
$host = "localhost";
$user = "root";
$pass = ""; // On définit les infos de la base de données
$db = "topaze";
$date = date("d-m-Y"); // On définit le variable $date (ici, son format)

$backup = $db."bdd-backup_".$date.".sql";

// Utilise les fonctions système : MySQLdump
$command = "D:\Sites\topaze\mysqldump -h $host -u $user -p$pass $db > $backup";
system($command);


// Démarre la procédure de téléchargement
$taille = filesize($backup);
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Type: application/sql");
header("Content-Disposition: attachment; filename=$backup;");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".$taille);
@readfile($backup);

?>
sur phpmyadmin j'arrive a sauvegarder en .sql et a restaurer la bdd aussi.

j'ai essayer de mettre des espace entre -h$host et le reste de ne pas en mettre.
j'ai essayer d'écrire la commande complète sans passer par des variables.

bref un petit coup de main pour mieux comprendre tout sa m'aiderai vraiment.

plonger dans les méandres de la curiosité
:) ;) ;( =( =) :)
A voir également:

1 réponse

gilbert1995 Messages postés 414 Date d'inscription   Statut Membre Dernière intervention   29
 
<?php
function dump($ignore)
{
 $server = '*********';
 $database = '*********';
 $user = '*********';
 $password = '*********';

 //Connexion à la base
 $db = mysql_connect($server, $user, $password) or die(mysql_error());
 mysql_select_db($database, $db) or die(mysql_error());

 //on récupère la liste des tables de la base de données
 //$tables = mysql_list_tables($database, $db) or die(mysql_error());
 $sql = 'SHOW TABLES FROM '.$database;
 $tables = mysql_query($sql) or die(mysql_error());

 // si on ne veut pas récupérer les $ignore premières tables
 for ($i=0; $i<$ignore; $i++) ($donnees = mysql_fetch_array($tables));

 // aller on boucle sur toutes les tables
 while ($donnees = mysql_fetch_array($tables))
 {
  // on récupère le create table (structure de la table)
  $table = $donnees[0];
  $sql = 'SHOW CREATE TABLE '.$table;
  $res = mysql_query($sql) or die(mysql_error().$sql);
  if ($res)
  {
   $backup_file = '../temp/backup_' . $table . '.sql.gz';
   $fp = gzopen($backup_file, 'w');

   $tableau = mysql_fetch_array($res);
   $tableau[1] .= ";\n";
   $insertions = $tableau[1];
   gzwrite($fp, $insertions);

   $req_table = mysql_query('SELECT * FROM '.$table) or die(mysql_error());
   $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; $i++)
    {
     $insertions .= '\'' . mysql_real_escape_string($ligne[$i]) . '\', ';
    }
    $insertions = substr($insertions, 0, -2);
    $insertions .= ");\n";
    gzwrite($fp, $insertions);
   }
  } // fin if ($res)
  mysql_free_result($res);
  gzclose($fp);
 }
 return true;
}

//appel de la fonction
$dump = dump(0);
?>
0
harderpod Messages postés 326 Date d'inscription   Statut Membre Dernière intervention   50
 
salut merci pour le script,mais je ne souhaite pas utiliser gzip, puis je souhaite que ma cliente puisse telecharger son dump facilement en un clique savoir ou elle a enregistrer sa bdd.

puis par la suite je voudrais rajouter au script l'envoie du dump par mail sur ma boite mail au cas ou son pc grille ou son disque dur pour pouvoir restaurer la bdd en cas de pepin.

je testerais mais je ne croit pas que cela soit adpater a mon cas.
0