Eléphant du PHP |
383 Messages
05 déc. 2005, 01:45
sans doute pas nouveau, mais bon... ce script permet de recuperer une base de donnee mySql ( ie : la structure des tables et les donnees ) et de les sauvegarder dans un format compressé sur un serveur ftp ( par exemple sur un compte free, maintenant qu'il y a moyen d'avoir de la place chez eux, ca fait un endroit reve pour des sauvegardes ). il y a beaucoup d'affichage inutile, ca permet de savoir ce qui se passe si le temps de traitement est long, mais rine d'indispensable.
<?php
/* paramètres de connexion à MySQL */
$host = 'localhost';
$user = '?';
$pass = '?';
$base = '?';
/* Paramètres de connexion au serveur FTP */
$serveur_ftp = "ftp.serveur.com";
$usager_ftp = "?";
$mdp_ftp = "?";
$repertoire = "?";
mysql_connect($host, $user, $pass);
/* recuperation de la liste des tables */
$liste = mysql_list_tables($base);
$resultat1 = "#dump de la base ". $base ." généré le ".date("l j F Y ")." à ". date("H:i") ."\r\n#creation des tables\r\n";
$resultat2 = "#insertion des donnees\r\n";
while($table = mysql_fetch_array($liste)) //pour chaque table
{
$table = $table[0];
echo "<br>traitement de la table : $table<br>";
echo "structure<br>";
$resultat1.="#structure de la table '". $table ."'\r\n";
$struct = mysql_db_query($base, "show create table ". $table ."");//schema de creation de la table
$tab = mysql_fetch_array($struct);
$resultat1 .= $tab[1].";\r\n";
$donnee = mysql_db_query($base, "select * from ". $table ."");//donnee dans la table
$n = mysql_num_fields($donnee);
echo "insertion<br>";
$resultat2.="#insertion dans la table ". $table ."\r\n";
while($r=mysql_fetch_array($donnee))
{
$insert="insert into ". $table ." values (";
for ($i = 0; $i < $n; $i++)
{
$insert .= "'". mysql_real_escape_string($r[$i]) ."', ";
}
$insert = substr($insert, 0, -2) .");\n"; // suppression du dernier " ," superflu
$resultat2 .= $insert;
}
$resultat2 .= "\r\n";
}
// echo str_replace("\n","<br>",$resultat1.$resultat2);//debug : affichage du resultat
echo "<br>création du fichier compressé<br>";
/* nom du fichier + date et heure */
$filename = "BDD_". date("dmY-Hi") .".gz";
/* création du fichier compressé en précisant un degré de compression */
$g = gzopen($filename, "wb9");
if(false == $g)
{
echo "erreur de creation de l'archive";
}
else
{
gzwrite($g, $resultat1 . $resultat2);
gzclose($g);
echo "connection au serveur ftp<br>";
/* Connexion au serveur ftp */
$f = ftp_connect($serveur_ftp);
/* Identification auprès du serveur ftp */
ftp_login($f, $usager_ftp, $mdp_ftp);
/* On se place dans le bon répertoire */
ftp_chdir($f, $repertoire);
echo "envoi de l'archive<br>";
/* On copie l'archive */
ftp_put($f, $filename, $filename, FTP_BINARY);
/* Fermeture de la connexion */
ftp_close($f);
/* Suppression du fichier original */
unlink($filename);
echo "terminé";
}
?>
Modifié en dernier par
jobherzt le 07 déc. 2005, 12:17, modifié 3 fois.