1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179
|
<?php
//////////////////////////////////////////////////
//////////////////////////////////////////////////
// K20save v1.0 //
// Auteur : K20 Email : kev.in@wanadoo.fr //
// * Fichier de sauvegarde * //
// //
// Vous pouvez utilisez, modifiez, distribuer //
// ce script à votre guise dans un but non //
// commercial. Veuillez laisser cet en-tête //
//////////////////////////////////////////////////
//////////////////////////////////////////////////
// Include du fichier de configuration et du fichier de langue choisis //
include ('config.php');
include ('lang/'.$langue.'.php');
// Départ chrono
$temps_depart = getMicroTime();
// Base de donnée informations
$info_bdd = "--\n-- ".$lang['db']." : `$bdd`\n--\n\n";
if ($create_bdd == true)
{
$save = "--\n-- ".$lang['create_db']."\n--\nCREATE DATABASE `$bdd`;\n\n".$info_bdd;
}
else
{
$save = $info_bdd;
}
// Connexion à la base de donnée et sélection de la base de donnée
$connexion = mysql_connect($serveur,$login,$mdp) or die($lang['error_connexion']."<br />".mysql_error());
// Sélection de la bdd
mysql_select_db($bdd, $connexion) or die($lang['error_select']."<br />".mysql_error());
// Selection de TOUTES les tables //
$alltable = mysql_list_tables($bdd,$connexion);
/////////////////////////////////////////////////////////////////
// On effectue l'opération de sauvegarde sur toutes les tables //
////////////////////////////////////////////////////////////////
$num = mysql_num_rows($alltable);
if (empty($num)) // Vérification la présence d'au moins 1 table !
{
echo $lang['any_table'];
exit(); // On arrête le script
}
for ($i = 0; $i < $num; $i++)
{
$table = mysql_tablename($alltable, $i);
// Supprimer la table si existante
$qry_drop = 'DROP TABLE IF EXISTS `'.$table.'`;';
// Importation de la structure de la table
$qry_import_structure = 'SHOW CREATE TABLE `'.$table.'`';
$result = mysql_query($qry_import_structure,$connexion) or die (mysql_error($connexion));
$qry_create = mysql_fetch_row($result);
// Importation des lignes de la table et construction de l'INSERT
$qry_import_lignes = 'SELECT * FROM `'.$table.'`';
$lignes = mysql_query($qry_import_lignes, $connexion) or die (mysql_error($connexion));
// Nombres de champs
$nbchamps = mysql_num_fields($lignes);
// Ecriture de la table
$save .= "\n--\n-- ".$lang['structure']." `$table`\n--\n\n";
$save .= $qry_drop."\n";
$save .= $qry_create[1].";\n\n";
$save .= "--\n-- ".$lang['contents']." `$table`\n--\n\n";
// Vérification de la présence d'au moins 1 enregistrement dans la table ! //
$nb_save = mysql_num_rows($lignes);
if (!empty($nb_save))
{
$save .= "INSERT INTO `$table`";
// Inscription des champs
$save .= ' (';
for($j = 0; $j < $nbchamps; $j++)
{
$save .= '`'.mysql_field_name($lignes, $j).'`';
// Continue ou termine la chaîne
if($j == ($nbchamps - 1)) $save .= ') ';
else $save .= ', ';
}
// Génération des enregistrements
$save .= 'VALUES ';
while ($row = mysql_fetch_row($lignes))
{
if(isset($boucle_start)) { $save .= ",\n"; } else { $boucle_start = ''; }
$values = '(\''.implode("','", array_map('mysql_real_escape_string', $row)).'\')';
$save .= $values;
$nb++;
}
$save .= ";\n";
unset($boucle_start);
}
// Si 0 enregistrement on l'affiche !
else {
echo $lang['any_data']." $table ...<br />"; // On l'affiche ...
$save .= "--\n-- ".$lang['any_data']." `$table`\n--\n"; // On l'écrit dans le fichier
}
}
// On ferme la connexion
mysql_close($connexion);
////////////////////////////////////////////////////////////
// Fin de l'opération de sauvegarde sur toutes les tables //
///////////////////////////////////////////////////////////
// Date actuelle et temps
$date = date("d-m-Y",time());
$temps = round(getMicroTime() - $temps_depart,4);
// Nom du fichier généré dynamiquement en fonction de la date
$fichier = 'sauvegarde-'.$bdd.'-'.$date.'.sql';
// Informations finales
$save .= "\n--\n-- ".$lang['info']." \"$fichier\", $num table(s), $nb ".$lang['info2']." $temps s, date : $date\n--";
/////////////////////////////////////////////////////////////////
// Enregistrement de la base de donnée dans un fichier texte ! //
/////////////////////////////////////////////////////////////////
// Création du fichier
if (!$file = fopen("sauvegardes/".$fichier, 'w+'))
{
echo $lang['open_no'].$fichier;
exit;
}
// Ecriture dans le fichier
if (fwrite($file, $save) === FALSE)
{
echo $lang['write_no'].$fichier;
exit;
}
echo $lang['write_success'];
// On ferme le fichier
fclose($file);
// Envoie d'un mail avec le fichier si demandé
if ($send_mail == true)
{
// Construction de l'attachement
$header .= "Content-Type: text/sql; name=\"$fichier\"\n";
$header .= "Content-Transfer-Encoding: charset=iso-8859-1\n";
$header .= "Content-Disposition: attachment; filename=\"$fichier\"\n\n";
// Ouverture et lecture du fichier à attacher
$file = fopen("sauvegardes/".$fichier, "r" );
$contenu = fread( $file, filesize("sauvegardes/".$fichier));
fclose($file); // Fermeture du fichier
$header .= $contenu; // Introduction du fichier dans le mail
mail($email,"Votre fichier de sauvegarde MySQL du $date","Votre fichier de sauvegarde !",$header); // Envoie du mail
echo $lang['email']; // Message de succès
}
// On efface le fichier si demandé
if ($del_sql == true and $send_email == true)
{
if (unlink("sauvegardes/".$fichier) === FALSE)
{
echo $lang['no_del'].$fichier;
}
else
{
echo $lang['del'];
}
}
?> |
Partager