Bonjour,
J'ai écrit ce code PHP qui, dans la logique, m'envoie un mail avec le fichier SQL en pièce jointe. Il m'envoie le mail SANS la pièce jointe (le fichier SQL). Je vous mets le code PHP et si quelqu'un pourrait m'aider, ce serait sympa.
<?php
//pour la sauvegarde de la base de données
$host = '*****';
$user = '*****';
$pass = '*****';
$base = '*****';
//pour l'envoi par mail
$destinataire='webmaster@site.com'; // l'adresse e-mail de destination
$nom_expediteur='auteur'; // le nom de l'expéditeur, tel qu'il apparaîtra dans le mail
$email_expediteur='webmaster@site.com'; // l'email de l'expéditeur, tel qu'il apparaîtra dans le mail
$email_reply='auteur'; // l'email de réponse tel qu'il apparaîtra dans le mail
$sujet='Sauvegarde automatique quotidienne de la Base de Données'; // le sujet du mail
$fichierjoint="Sauvegarde_".date("d-n-Y").".sql";
$message_html='<html>
<head>
<title>'.$sujet.'</title>
</head>
Bonjour,
En pièce jointe, la dernière sauvegarde de votre base de données
</html>';
// connexion à la base
mysql_connect($host, $user, $pass);
mysql_select_db($base);
function mysql_structure() {
// on va faire une requête pour rechercher toutes les tables de la bdd concernée
$req_table = "SHOW TABLES";
$result_table = mysql_query($req_table) or die ("Impossible d'exécuter la requête concernant la recherche des tables - ".mysql_error());
// et on va les afficher sous forme de lien
while ($donnees_table = mysql_fetch_array($result_table)) {
$table = $donnees_table[0];
// on va créer une variable pour y mettre le texte concernant l'en-tête de la structure qui sera écrit dans le fichier .txt
@$result .= "-- \n";
$result .= "-- Structure de la table ` ".$table." ` \n";
$result .= "--\n \n";
// on va demander la "création" de la table
$req_structure = "SHOW CREATE TABLE $table ";
$result_structure = mysql_query($req_structure) or die ("Impossible de trouver la structure de ". $table .mysql_error());
$donnee_structure = mysql_fetch_array($result_structure);
$structure = $donnee_structure[1] ;
$structure .= "\n \n" ;
$result .= $structure;
// on créé une variable pour le titre du contenu de la table
$titre_contenu = "-- \n";
$titre_contenu .= "-- Contenu de la table ` ".$table."` \n";
$titre_contenu .= "-- \n \n";
$result .= $titre_contenu;
// on va récupérer le nombre de champs présents dans la table
$req_champ = "SHOW COLUMNS FROM $table";
$result_champ = mysql_query ($req_champ) or die ("Impossible de trouver les champs de ". $table .mysql_error());
$nbre_champ = mysql_num_rows($result_champ);
// on va rechercher TOUS les enregistrements de la table concernée
$req_tout = "SELECT * FROM $table ";
$result_tout = mysql_query($req_tout) or die ("Impossible de trouver les enregistrements de ". $table .mysql_error());
// on va boucler pour sortir toutes les données
while($donnees_tout = mysql_fetch_array($result_tout)) {
$contenu = "INSERT INTO " . $table . " VALUES (";
$i = 0;
// on va boucler tous les champs
while ( $i < $nbre_champ ) {
// et on affiche les résultats en fonction des champs et dans l'ordre des champs
$contenu .= "'". mysql_real_escape_string($donnees_tout[$i]) ."' ,";
$i++;
}
// on va enlever la dernière virgule
$contenu = substr($contenu,0,-2);
$contenu .= ") ; \n";
$result .= $contenu;
}
$result .= "\n";
}
return $result;
}
// creation d'une fonction file_put_content si le script est en PHP4 :
if(!function_exists('file_put_contents')) {
function file_put_contents($filename, $data, $file_append = false) {
$fp = fopen($filename, (!$file_append ? 'w+' : 'a+'));
if(!$fp) {
trigger_error('file_put_contents ne peut pas écrire dans le fichier.', E_USER_ERROR);
return;
}
fputs($fp, $data);
fclose($fp);
}
}
// création du fichier de dump sur le même niveau que ce fichier dump.php
file_put_contents('sqldump_'.date("d-n-Y").".sql", mysql_structure());
// effacement du fichier precedant (créé 21 jours plus tot)
$time_old = getdate(mktime()-(21*24*3600));
$an = $time_old['year'];
$mois = $time_old['mon'];
$jour = $time_old['mday'];
// formatage des jours à 1 chiffre
for($k=1; $k<10; $k++)
{
if ($jour==$k)
{
$jour='0'.$jour;
}
}
$date_old =$jour.'-'.$mois.'-'.$an;
$file_old = 'sqldump_'.$date_old.".sql";
if (file_exists($file_old)) {
unlink($file_old);
}
echo 'Sauvegarde effectuée
';
?>
<?php //Pour envoyer ce fichier par mail :
//-----------------------------------------------
//GENERE LA FRONTIERE DU MAIL
//-----------------------------------------------
$frontiere = '-----=' . md5(uniqid(mt_rand()));
//-----------------------------------------------
//HEADERS DU MAIL
//-----------------------------------------------
$headers = 'From: "'.$nom_expediteur.'" <'.$email_expediteur.'>'."\n";
$headers .= 'Return-Path: <'.$email_reply.'>'."\n";
$headers .= 'MIME-Version: 1.0'."\n";
$headers .= 'Content-Type: multipart/mixed; boundary="'.$frontiere.'"';
//-----------------------------------------------
//MESSAGE HTML
//-----------------------------------------------
$message .= '--'.$frontiere."\n";
$message .= 'Content-Type: text/html; charset="iso-8859-1"'."\n";
$message .= 'Content-Transfer-Encoding: 8bit'."\n\n";
$message .= $message_html."\n\n";
//-----------------------------------------------
//PIECE JOINTE
//-----------------------------------------------
$message .= '--'.$frontiere."\n";
$message .= 'Content-Type: text/tab-separated-value; name="'.$fichierjoint.'"'."\n";
$message .= 'Content-Transfer-Encoding: base64'."\n";
$message .= 'Content-Disposition:attachement; filename="'.$fichierjoint.'"'."\n\n";
$message .= chunk_split(base64_encode(file_get_contents('./'.$fichierjoint.'')))."\n";
$message .= '--'.$frontiere.'--'."\n";
if(mail($destinataire,$sujet,$message,$headers))
{
echo 'Le mail a été envoyé';
}
else
{
echo 'Le mail n\'a pu être envoyé';
}
?>
Cordialement