Vous avez un site PHP avec une base de données MySQL.
Vous voulez que des utilisateurs modifient celle-ci via des pages d'administration.
Le problème est que la base sera modifiée immédiatement ! Que faire dans le cas ou un utilisateur fait une erreur ?
La solution est de se faire une sauvegarde de la base.
Sur ce tutorial, la personne ira d'abord sur la page save.php ou il rentrera son mail. La base sera sauvegardée, zippée puis envoyé par mail à son adresse et également à l'adresse du webmaster.
Un petit récapitulatif de tous les fichiers nécessaires à l'exécution de notre script.
Save.php : C'est le fichier de base qui permet de sauvegarder, de zipper puis d'envoyer par mail la sauvegarde.
mail.php : Envoie le fichier
mime_mail.class.php : Permet la gestion de la classe mime
zip.lib.php : Permet de zipper le fichier
Ce petit script vous permettra en toute sécurité de laisser les utilisateurs "trafiquer" la base de données sans se soucier des erreurs éventuelles puisque vous pourrez facilement remettre la base de données.
save.php
Le fichier de sauvegarde
Ce fichier permet donc de gérer le compactage de la base, la zipper, envoyer le fichier.
Vous devrez changer quelques données tel que la connection, les adresses mail et autres. Les données à modifier sont comprises entre les // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!.
Voici le code :
save.php
<? // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! //ici les parametres pour la connexion $host="localhost"; // host = $user="root"; // login de la base $passe=""; // password $base="test"; // nom de la base // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
$action = @$_GET["action"];
if($action=="oui") {
function Compacter($base) { // Permet de compacter la base avant de lancer toute la procédure $tables = mysql_list_tables($base); while ($enr = mysql_fetch_row($tables)) @mysql_query("OPTIMIZE TABLE ".$enr[0]); }
if($connexion = @mysql_connect($host,$user,$passe)) { // on effectue la connexion
Compacter($base);
$select_base=@mysql_select_db($base); // Selection de la base de données
fputs($f2,"# Sauvegarde de base de données\n"); fputs($f2,"# Batch par Florent MARIE aka fmarie - 2005\n\n"); $tables = mysql_list_tables($base); while ($enr = mysql_fetch_row($tables)) { fputs($f2,"# Les tables traitées sont ".$enr[0].";\n"); } fputs($f2,"\n"); $tables = mysql_list_tables($base); while ($enr = mysql_fetch_row($tables)) { fputs($f2,"DELETE FROM $enr[0];\n"); }
$tables = mysql_list_tables($base); while ($enr = mysql_fetch_row($tables)) { $res = mysql_query("SELECT * FROM $enr[0]"); // le nombre de champs de la table $champs = mysql_num_fields($res); // Pour chaque ligne while($val=mysql_fetch_array($res)) { $tmp = "INSERT INTO ".$enr[0]." VALUES("; $c=0; // Pour chaque champ while($c < $champs) { // Une virgule sauf au premier if($c>0) $tmp .= ", "; // Le contenu du champ $tmp .= "'".AddSlashes($val[$c])."'"; $c++; } $tmp .= ");\n"; // Ecrit la ligne fputs($f2,$tmp); } } fclose($f2);
// ZIP DU FICHIER
include("zip.lib.php");
// Compresse le fichier $zipfile = new zipfile(); $zipfile -> addFile(implode("",file($fname)), $fname); // Sauve le zip $f2=fopen($fname.".zip","w"); fputs($f2,$zipfile -> file()); fclose($f2);
// NETTOYAGE
// Détruit le fichier initial // mais laisse le zip au cas où... unlink($fname);
// ENVOI LE ZIP EN PJ
include("mail.php"); sendmail("","","",$_POST["mail"],"","","Sauvegarde de la base $base","",$fname.".zip");