Projet L3 Technologie Web
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
-39%
Le deal à ne pas rater :
Ordinateur portable ASUS Chromebook Vibe CX34 Flip
399 € 649 €
Voir le deal

Sauvegarde de la base de données

3 participants

Aller en bas

Sauvegarde de la base de données Empty Sauvegarde de la base de données

Message  Benoît_HAGENBOURGER Jeu 1 Mai - 20:49

Après avoir essayer sans succès de faire marcher la commande mysqldump dans un script php, j'ai trouvé et testé un script php qui fonctionne bien pour sauvegarder la base de données dans un fichier .sql.
Voici le code :
$backupFile = date('Y.m.d-H.i.s_') . $database . '.sql';

header("Content-type: application/octet-stream");
header("Content-Disposition: attachment;filename=\"$backupFile\"");
header("Content-Transfer-Encoding: binary");

echo "--\n";
echo "-- Dump de la base $database\n";
echo "--\n";

mysql_connect ($host, $user, $password) or die ('ERREUR DE CONNEXION');
mysql_select_db ($database) or die ('AUTRE ERREUR');

$sql_tables = "SHOW TABLES";
$req_tables = mysql_query($sql_tables);
while (list($table) = mysql_fetch_row($req_tables)) {
echo "\n--\n-- Table $table\n\n";
echo "DROP TABLE IF EXISTS $table;\n";
$sql_create_table = "SHOW CREATE TABLE $table";
$req_create_table = mysql_query($sql_create_table);
$create_table = mysql_fetch_array($req_create_table);
echo $create_table[1].";\n";
echo "\n--\n-- Remplissage de $table\n\n";
$sql_fill_table = "SELECT * FROM $table";
$req_fill_table = mysql_query($sql_fill_table);
while ($row = mysql_fetch_assoc($req_fill_table)) {
$line_insert = "INSERT INTO $table (";
$l_value = ") VALUES (";
foreach ($row as $field => $value) {
$line_insert .= "`$field`, ";
$l_value .= "'".mysql_real_escape_string($value)."', ";
}
$line_insert = substr($line_insert, 0, -2);
$l_value = substr($l_value, 0, -2);
echo $line_insert.$l_value.");\n";
}
}
Je ne sais pas ce que vous en penser ...
Je vais regarder comment restaurer la base à partir de ce fichier maintenant.
Benoît_HAGENBOURGER
Benoît_HAGENBOURGER
Pas trop noob
Pas trop noob

Messages : 10
Date d'inscription : 07/03/2008
Age : 38
Localisation : Dijon / Mâcon

http://benoit.hagenbourger.free.fr

Revenir en haut Aller en bas

Sauvegarde de la base de données Empty Re: Sauvegarde de la base de données

Message  Nicolas BONNETIER Jeu 1 Mai - 21:21

Moi ça me va : ça marche comme il faut, et ça répond à la demande, alors je prends...

Reste plus qu'à trouver comment faire l'inverse, et c'est gagné !
Nicolas BONNETIER
Nicolas BONNETIER
Nerd
Nerd

Messages : 63
Date d'inscription : 05/03/2008
Age : 36
Localisation : Dijon --> pas internet la semaine !

Revenir en haut Aller en bas

Sauvegarde de la base de données Empty Re: Sauvegarde de la base de données

Message  Benoît_HAGENBOURGER Mer 7 Mai - 15:25

ca marche, j'men occupe dès que j'aurai mon portable en état de marche.
Benoît_HAGENBOURGER
Benoît_HAGENBOURGER
Pas trop noob
Pas trop noob

Messages : 10
Date d'inscription : 07/03/2008
Age : 38
Localisation : Dijon / Mâcon

http://benoit.hagenbourger.free.fr

Revenir en haut Aller en bas

Sauvegarde de la base de données Empty Re: Sauvegarde de la base de données

Message  Benoît_HAGENBOURGER Ven 16 Mai - 16:45

Bon mon petit chef, j'ai fait l'inverse, c'est en 2 parties :
-> Formulaire pour récupérer le fichier que l'on veut charger, contenant la sauvegarde de la base de données. (Fait avec le script ci-dessus) :

<!-- formulaire pour télécharger le fichier -->
<form enctype="multipart/form-data" method="post" action="restaurationExecution.php" name="restaurerBDD">

Fichier de la base :
<br>
<!-- Le nom de l'élément input détermine le nom dans le tableau $_FILES -->
<input name="userfile" type="file" />
<br>
<br>

<input type="submit" name="bouton" value="Envoyer">

</form>

-> Script php pour restaurer la base de données à partir du fichier :
//mots de passe
require "../secret/pwd.php";

//téléchargement du fichier de restauration
$uploaddir = '../dump/';

if($_FILES["userfile"]["size"]>0) {

//nom du fichier uploadé
$savefile= $uploaddir.$_FILES["userfile"]["name"];

$temp = $_FILES["userfile"]["tmp_name"];

//upload du fichier
if(move_uploaded_file($temp, $savefile)) {

//ouverture du fichier uploadé
$fp = fopen($savefile,"r");
$donnees = "";

//lecture du fichier lignes par lignes
$separateur = "#{)";
while (!feof($fp)) {
$buffer = fgets($fp);

//on découpe la ligne par caractères
$caracteres = str_split($buffer);

//Si ce n'est pas une ligne de commentaire on l'ajoute à la variable $donnees
if(strcmp(($buffer[0].$buffer[1]),"--")!=0 && count($caracteres)>1){ // il faut tester qu'on est bien en fin de ligne pour mettre le séparateur
if(strcmp($buffer[count($caracteres)-2],";")==0) //on est en fin de ligne et la ligne se termine par un ;
$donnees=$donnees.$buffer.$separateur;
else
$donnees=$donnees.$buffer;
}
}
//fermeture du fichier
fclose($fp);

//On récupère chaque requêtes séparément
$requete = split($separateur,$donnees);

//connexion à la base de données
mysql_connect ($host, $user, $password) or die ("ERREUR DE CONNEXION");
mysql_select_db ($database) or die ("AUTRE ERREUR");

//On exécute chaque requêtes
$i=0;
while(strcmp($requete[$i],"")!=0){
$query = $requete[$i];
$result = mysql_query($query) or die($query);
$i++;
}

//déconnexion de la base de données
mysql_close();

//message
echo "La base de données a bien été restaurée";
}
else
echo "Fichier incorrect";

Voila, j'ai testé en local ça marche. Si quelqu'un peut retester historie d'être sur qu'aucun bigs ne reste.
Benoît_HAGENBOURGER
Benoît_HAGENBOURGER
Pas trop noob
Pas trop noob

Messages : 10
Date d'inscription : 07/03/2008
Age : 38
Localisation : Dijon / Mâcon

http://benoit.hagenbourger.free.fr

Revenir en haut Aller en bas

Sauvegarde de la base de données Empty Re: Sauvegarde de la base de données

Message  Benoît_HAGENBOURGER Ven 16 Mai - 17:52

bon, visiblement y'a un soucis avec la fonction str_split sur un hébergeur free ...
Benoît_HAGENBOURGER
Benoît_HAGENBOURGER
Pas trop noob
Pas trop noob

Messages : 10
Date d'inscription : 07/03/2008
Age : 38
Localisation : Dijon / Mâcon

http://benoit.hagenbourger.free.fr

Revenir en haut Aller en bas

Sauvegarde de la base de données Empty Re: Sauvegarde de la base de données

Message  Nicolas BONNETIER Ven 16 Mai - 18:42

En effet, ça marche bien en local...
Seul petit souci, mais pas très important : on est obligé de recréer la base à la main : la sauvegarde ne fait une sauvegarde que des tables de la base, donc pour recréer la base, il faut créer une nouvelle base, puis lancer le script de restauration...

A la limite, il faudrait rajouter une case pour créer une nouvelle base de données pour que l'admin (on ne connait pas son niveau) ne soit pas trop perdu si la base est complètement supprimée...
Nicolas BONNETIER
Nicolas BONNETIER
Nerd
Nerd

Messages : 63
Date d'inscription : 05/03/2008
Age : 36
Localisation : Dijon --> pas internet la semaine !

Revenir en haut Aller en bas

Sauvegarde de la base de données Empty Re: Sauvegarde de la base de données

Message  Benoît_HAGENBOURGER Dim 18 Mai - 23:43

ok, je vais regarder ça.
Je sais pas comment ça se passe chez tous les hébergeurs, mais il me semble que chez free par exemple, on a pas les droit pour créer une nouvelle base.

J'ai pas eu le temps d'avancer ce WE donc mon script ne marche tjs pas chez free :s, j'espère régler ce problème demain.
Benoît_HAGENBOURGER
Benoît_HAGENBOURGER
Pas trop noob
Pas trop noob

Messages : 10
Date d'inscription : 07/03/2008
Age : 38
Localisation : Dijon / Mâcon

http://benoit.hagenbourger.free.fr

Revenir en haut Aller en bas

Sauvegarde de la base de données Empty Re: Sauvegarde de la base de données

Message  David CANNELLE Lun 19 Mai - 12:54

Je confirme que chez free, on n'a pas le droit de créer une base de données.

Et pour cause : on n'a le droit qu'a une seule base par compte.
David CANNELLE
David CANNELLE
Geek
Geek

Messages : 25
Date d'inscription : 05/03/2008
Age : 37
Localisation : Dijon

http://dcanl.free.fr

Revenir en haut Aller en bas

Sauvegarde de la base de données Empty Re: Sauvegarde de la base de données

Message  Nicolas BONNETIER Mer 21 Mai - 18:29

Maintenant que c'est fonctionnel, il faudrait que tu me fasse un petit formulaire PHP pour intégrer tout ça, que je puisse commencer mon manuel d'installation...

Pour info, on possèdera tous les droits sur le serveur sur lequel on fera la démo...
Nicolas BONNETIER
Nicolas BONNETIER
Nerd
Nerd

Messages : 63
Date d'inscription : 05/03/2008
Age : 36
Localisation : Dijon --> pas internet la semaine !

Revenir en haut Aller en bas

Sauvegarde de la base de données Empty Re: Sauvegarde de la base de données

Message  Benoît_HAGENBOURGER Mer 21 Mai - 18:29

Bon la fonction str_split marche qu'avec php5 c'est pour ça que mon script ne marchait pas avec free dont le serveur utilise PHP4.
J'ai donc trouvé une solution que voici :

//téléchargement du fichier de restauration
$uploaddir = '../dump/';

if($_FILES["userfile"]["size"]>0) {

//nom du fichier uploadé
$savefile= $uploaddir.$_FILES["userfile"]["name"];

$temp = $_FILES["userfile"]["tmp_name"];

//upload du fichier
if(move_uploaded_file($temp, $savefile)) {

//ouverture du fichier uploadé
$fp = fopen($savefile,"r");
$donnees = "";

//lecture du fichier lignes par lignes
$separateur = "#{)";
while (!feof($fp)) {
$buffer = fgets($fp);

//on découpe la ligne par caractères
//$caracteres = str_split($buffer); -- la fonction str_split marche uniquement avec PHP 5
$caracteres = explode("\r\n",trim(chunk_split($buffer,1)));

//Si ce n'est pas une ligne de commentaire on l'ajoute à la variable $donnees
if(strcmp(($buffer[0].$buffer[1]),"--")!=0 && count($caracteres)>1){ // il faut tester qu'on est bien en fin de ligne pour mettre le séparateur
//if(strcmp($buffer[count($caracteres)-2],";")==0) //on est en fin de ligne et la ligne se termine par un ; --> si on utilise la fonction str_split
if(strcmp($buffer[count($caracteres)-1],";")==0) //on est en fin de ligne et la ligne se termine par un ; --> si on utilise la fonction explode
$donnees=$donnees.$buffer.$separateur;
else
$donnees=$donnees.$buffer;
}
}
//fermeture du fichier
fclose($fp);

//On récupère chaque requêtes séparément
$requete = split($separateur,$donnees);

//connexion à la base de données
mysql_connect ($host, $user, $password) or die ("ERREUR DE CONNEXION");
mysql_select_db ($database) or die ("AUTRE ERREUR");

//On exécute chaque requêtes
$i=0;
while(strcmp($requete[$i],"")!=0){
$query = $requete[$i];
$result = mysql_query($query) or die($query);
$i++;
}

//déconnexion de la base de données
mysql_close();

//message
echo "La base de données a bien été restaurée";
}
else
echo "Fichier incorrect";
}
Benoît_HAGENBOURGER
Benoît_HAGENBOURGER
Pas trop noob
Pas trop noob

Messages : 10
Date d'inscription : 07/03/2008
Age : 38
Localisation : Dijon / Mâcon

http://benoit.hagenbourger.free.fr

Revenir en haut Aller en bas

Sauvegarde de la base de données Empty Re: Sauvegarde de la base de données

Message  Benoît_HAGENBOURGER Jeu 22 Mai - 1:29

Voila où vous pouvez trouver les sources : http://benoit.hagenbourger.free.fr/sources/joomla.rar
Chef dis moi si ça te convient ...
Benoît_HAGENBOURGER
Benoît_HAGENBOURGER
Pas trop noob
Pas trop noob

Messages : 10
Date d'inscription : 07/03/2008
Age : 38
Localisation : Dijon / Mâcon

http://benoit.hagenbourger.free.fr

Revenir en haut Aller en bas

Sauvegarde de la base de données Empty Re: Sauvegarde de la base de données

Message  David CANNELLE Jeu 22 Mai - 11:24

Pour info, chez free, tu peux passer sur le serveur php5 en mettant un .htaccess à la racine de ton espace perso avec la ligne suivante :
Code:
php 1
David CANNELLE
David CANNELLE
Geek
Geek

Messages : 25
Date d'inscription : 05/03/2008
Age : 37
Localisation : Dijon

http://dcanl.free.fr

Revenir en haut Aller en bas

Sauvegarde de la base de données Empty Re: Sauvegarde de la base de données

Message  Benoît_HAGENBOURGER Ven 23 Mai - 12:47

Merci pour l'info!
Benoît_HAGENBOURGER
Benoît_HAGENBOURGER
Pas trop noob
Pas trop noob

Messages : 10
Date d'inscription : 07/03/2008
Age : 38
Localisation : Dijon / Mâcon

http://benoit.hagenbourger.free.fr

Revenir en haut Aller en bas

Sauvegarde de la base de données Empty Re: Sauvegarde de la base de données

Message  Benoît_HAGENBOURGER Mar 27 Mai - 17:35

Voila mon travail définitif (si tu trouves plus de bug) chef...
http://benoit.hagenbourger.free.fr/sources/joomla.rar
Benoît_HAGENBOURGER
Benoît_HAGENBOURGER
Pas trop noob
Pas trop noob

Messages : 10
Date d'inscription : 07/03/2008
Age : 38
Localisation : Dijon / Mâcon

http://benoit.hagenbourger.free.fr

Revenir en haut Aller en bas

Sauvegarde de la base de données Empty Re: Sauvegarde de la base de données

Message  Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
Ne ratez plus aucun deal !
Abonnez-vous pour recevoir par notification une sélection des meilleurs deals chaque jour.
IgnorerAutoriser