script de sauvegarde de votre base de données via php compatible tous hébergeurs Par JarodxXx
le mercredi 13 février 2008, 11:12
Hier je vous presentais un script de sauvegarde automatique de la base de données, malheureusement je me suis rendu compte par la suite que la fonction système qui exécute cette commande n'est pas compatible avec tous les hébergement s... Alors David du blog www.numb3rs.fr me transmet une solution plus adaptée.
Copier le code suivant que vous placerez dans un dossier spécial auquel vous aurez pris soin de définir un CHMOD 0777 pour permettre l'écriture dans le dossier ... exécutez la page et le tour est joué !
Evidement c'est un peu rébarbatif d'avoir à exécuter cette manip tous les jours alors sur les conseils de weetabix je vous donne le lien de ce site qui vous permet de programmer des taches à heures régulières si votre hébergement ne vous permet d'avoir accès CRON<?php
function svg_bdd($host,$user,$pass,$base) {
//==========================================================================
// création d'un fichier affichant en boucle le contenu des tuples de la base :
//==========================================================================
//on se connecte à la base
mysql_connect($host, $user, $pass);
mysql_select_db($base);
//on récupère les tables de la base
$tables = mysql_list_tables($base);
while ($donnees = mysql_fetch_array($tables)) { //tant qu'on trouve des résultats, on créé un tableau
$table = $donnees[0]; //on affecte la var table avec le premier élément du tableau qui correspond au nom de la table
$res = mysql_query("SHOW CREATE TABLE ".$table);
if($res){
$insertions = "";
$tableau = mysql_fetch_array($res);
$tableau[1] .= ";";
$dumpsql[] = str_replace(" ", "", $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 .= "); ";
}
if ($insertions != ""){
$dumpsql[] = $insertions;
}
}
}
return implode(" ", $dumpsql);
}
file_put_contents("sauvegarde".date("Y-m-d").".sql", svg_bdd("localhost","USER","PASS","BASE"));
?>












Ziki
Dailymotion
Flickr
Technorati
Twitter
1. Le mercredi 13 février 2008, 11:42 par David
Ya pas de quoi, si je peux proposer mes solutions, c'est avec plaisir que je le fais. Merci pour le lien en tout cas.
2. Le mercredi 13 février 2008, 12:59 par Maïs
Une erreure ici non ?
file_put_contents("sauvegarde".date("Y-m-d").".sql", mysql_structure("localhost","USER","PASS","BASE"));
ça serait pas plutot:
file_put_contents("sauvegarde".date("Y-m-d").".sql", svg_bdd("localhost","USER","PASS","BASE"));
?
3. Le mercredi 13 février 2008, 13:40 par David
Sisi effectivement, il ne faut pas de retour à la ligne.
Sur mon fichier initial, le retour à la ligne ne figure pas (peut être une erreur de copier / coller).
4. Le mercredi 13 février 2008, 13:41 par David
Heu oui aussi, pour l'appel à la ligne. La fonction est svg_bdd() et pas mysql_structure()
5. Le mercredi 13 février 2008, 21:20 par weetabix
et comme weetabix est sympa, il vous file un autre lien pour faire vos cron: http://cron.hiwit.org/
@ +
6. Le mercredi 13 février 2008, 23:40 par JarodxXx
merci a vous tous pour votre contribution ! J'ai corriger l'appel de la fonction
7. Le mercredi 20 février 2008, 18:06 par Nawak
Mais ce n'est compatible que pour DC 2 non ?
8. Le lundi 25 février 2008, 18:01 par jarodxxx
nawak > c'est compatible avec tout et n'importe quoi ... du moment que ca utilise mysql ... site , blog , forum , toutes plateforme et site perso, ca n'a aucun lien avec DC
9. Le lundi 28 avril 2008, 22:34 par Hugo
Sur un serveur dédié par contre, un simple appel à la commande mysqldump suffit et c'est tout propre au moins
Mais bon il faut posséder le serveur dédié lol.
10. Le jeudi 8 janvier 2009, 13:53 par Thomas
Merci pour ce script qui me permet de sauvegarder le livre d'or d'un site d'une amie www.mainsprecieuses.fr .
Petite question pour concernant http://cron.hiwit.org/ il indique je cite
"Attention : votre script doit au minimum afficher un texte comme 'OK' afin que cron considere le script comme executé...
si votre script affiche une page vide cron le considerera comme non executé "
il faut donc rajouter if{file_put_contents(blabla))
{
echo "OK";
} else {
echo "Echec de la sauvegarde";
};
est que c'est ca?
Encore merci à tous
Thomas
Un apprenti webmaster