IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Sauvegarde de base de données et envoi par e-mail


Sujet :

PHP & Base de données

  1. #1
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2007
    Messages : 282
    Points : 229
    Points
    229
    Par défaut Sauvegarde de base de données et envoi par e-mail
    J'ai créé un script qui me permet de faire un backup de ma base de donnée et de l'envoyer à une adresse mail souhaité.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    <?php
    $horaire = time();
    $heure=getdate($horaire);
    $date=$heure["mday"].'-'.$heure["mon"].'-'.$heure["year"];
    $db_server   = "localhost";
    $db_name     = "base";
    $db_username = "login";
    $db_password = "pass";
    $db_charset = "latin1"; /* mettre utf8 ou latin1 */
    $file = "$db_name.sql";
    @unlink($file);
    /* C'est tout. Placez ce fichier par FTP quelque part sur votre serveur Web, dans un endroit discret. */
    /* Puis ouvrez-le avec votre navigateur web et suivez les instructions. */
    /*if (system("mysqldump --host=$db_server --user=$db_username --password=$db_password -C -Q -e --default-character-set=$db_charset $db_name  > $db_name-$date-$db_charset.sql"));*/
    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("\n", "", $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 .= ");\n";
            }
            if ($insertions != ""){
              $dumpsql[] = $insertions;
            }
          }
        }
        return implode("\r", $dumpsql);
    }
    $fp =fopen("$db_name.sql",'w+');
    $sauvegarde=svg_bdd($db_server,$db_username,$db_password,$db_name);
    fwrite($fp, $sauvegarde);
    fclose($fp);
    //----------------------------------
    // Construction de l'entête
    //----------------------------------
    // On choisi généralement de construire une frontière générée aleatoirement
    // comme suit. (REM: je n'en connais pas la raison profonde)
    $boundary = "-----=".md5(uniqid(rand()));
     
    // Ici, on construit un entête contenant les informations
    // minimales requises.
    // Version du format MIME utilisé
    $header = "MIME-Version: 1.0\r\n";
    // Type de contenu. Ici plusieurs parties de type different "multipart/mixed"
    // Avec un frontière définie par $boundary
    $header .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
    $header .= "\r\n";
     
    //--------------------------------------------------
    // Construction du message proprement dit
    //--------------------------------------------------
     
    // Pour le cas, où le logiciel de mail du destinataire
    // n'est pas capable de lire le format MIME de cette version
    // Il est de bon ton de l'en informer
    // REM: Ce message n'apparaît pas pour les logiciels sachant lire ce format
    $msg = "Je vous informe que ceci est un message au format MIME 1.0 multipart/mixed.\r\n";
     
    //---------------------------------
    // 1ère partie du message
    // Le texte
    //---------------------------------
    // Chaque partie du message est séparé par une frontière
    $msg .= "--$boundary\r\n";
     
    // Et pour chaque partie on en indique le type
    $msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n";
    // Et comment il sera codé
    $msg .= "Content-Transfer-Encoding:8bit\r\n";
    // Il est indispensable d'introduire une ligne vide entre l'entête et le texte
    $msg .= "\r\n";
    // Enfin, on peut écrire le texte de la 1ère partie
    $msg .= "Ceci est un mail avec un fichier joint\r\n";
    $msg .= "\r\n";
     
    //---------------------------------
    // 2nde partie du message
    // Le fichier
    //---------------------------------
    // Tout d'abord lire le contenu du fichier
     
     
    $taille_modele = filesize($file);
    echo $taille_modele;
    $fp = fopen($file, "r");   // b c'est pour les windowsiens
    $attachment = fread($fp, $taille_modele);
    fclose($fp);
     
    // puis convertir le contenu du fichier en une chaîne de caractère
    // certe totalement illisible mais sans caractères exotiques
    // et avec des retours à la ligne tout les 76 caractères
    // pour être conforme au format RFC 2045
    $attachment = chunk_split(base64_encode($attachment));
     
    // Ne pas oublier que chaque partie du message est séparé par une frontière
    $msg .= "--$boundary\r\n";
    // Et pour chaque partie on en indique le type
    $msg .= "Content-Type: image/gif; name=\"$file\"\r\n";
    // Et comment il sera codé
    $msg .= "Content-Transfer-Encoding: base64\r\n";
    // Petit plus pour les fichiers joints
    // Il est possible de demander à ce que le fichier
    // soit si possible affiché dans le corps du mail
    $msg .= "Content-Disposition: inline; filename=\"$file\"\r\n";
    // Il est indispensable d'introduire une ligne vide entre l'entête et le texte
    $msg .= "\r\n";
    // C'est ici que l'on insère le code du fichier lu
    $msg .= $attachment . "\r\n";
    $msg .= "\r\n\r\n";
     
    // voilà, on indique la fin par une nouvelle frontière
    $msg .= "--$boundary--\r\n";
     
    $destinataire = "contact@agendamaire.u7n.org";
    $expediteur   = "contact@agendamaire.u7n.org";
    $reponse      = $expediteur;
    if(mail($destinataire, "Backup $db_name-$date-$db_charset", $msg,
         "Reply-to: $reponse\r\nFrom: $expediteur\r\n".$header));
    	 echo "backup fini";
    	unlink($file);
    ?>
    Le problème est sur le fait que ce script ne fonctionne pas chez umbreon, un hébergement gratuit. Je ne reçoit pas le mail avec la pièce jointe. Quelqu'un pourrait il m'aider à corriger mes erreurs? Merci d'avance

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Est ce que tu as essayé d'envoyer un mail sans la pièce jointe ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2007
    Messages : 282
    Points : 229
    Points
    229
    Par défaut
    OUI,
    Je précise que j'ai utilisé ce meme script sur un serveur mutualisé chez OVH et ce script fonctionne très bien

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ca ne reponds pas a la question ou alors ca y reponds trop exclusivement
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2007
    Messages : 282
    Points : 229
    Points
    229
    Par défaut
    oui, j'ai pu envoyé des mails sans pièce jointe.

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Le probleme ne viendrait-il pas de la taille du fichier envoyé ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2007
    Messages : 282
    Points : 229
    Points
    229
    Par défaut
    à l'heure actuelle, le fichier fait 700ko. Donc je suis loin de la dimension maximale utiliser par la fonction mail

  8. #8
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2007
    Messages : 282
    Points : 229
    Points
    229
    Par défaut
    EDIT 731,6ko

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Qu'on soit d'accord, tu confirmes que le meme mail envoyé par ce code sans la piece jointe fonctionne ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2007
    Messages : 282
    Points : 229
    Points
    229
    Par défaut
    J'ai peu être trouvé l'erreur, je pense que sa viens du header. Enfin c'est mon futur maitre de stage qui ma dit ceci.
    Je confirme que le mail sans aucune pièce jointe fonctionne, mais dès qu'il y a un attachement, ne marche pas.

  11. #11
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2007
    Messages : 282
    Points : 229
    Points
    229
    Par défaut
    Bonne année à tous avant tout.

    Voila le code où je suis actuellement, le mail s'envoie mais la pièce joint est inconnu.

    Si quelqu'un pourrais m'aider. Merci d'avance.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    <?php
    $horaire = time();
    $heure=getdate($horaire);
    $date=$heure["mday"].'-'.$heure["mon"].'-'.$heure["year"];
    $db_server   = "localhost";
    $db_name     = "base de donnée"; /* pour acceder a la base vielle de 7 jours, ajoutez -s à la fin du nom, comme ceci: NomDeLaBaseSQL-s */
    $db_username = "login";
    $db_password = "mot de passe";
    $db_charset = "latin1"; /* mettre utf8 ou latin1 */
    $file = "$db_name.sql";
    @unlink($file);
    /* C'est tout. Placez ce fichier par FTP quelque part sur votre serveur Web, dans un endroit discret. */
    /* Puis ouvrez-le avec votre navigateur web et suivez les instructions. */
    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("\n", "", $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 .= ");\n";
            }
            if ($insertions != ""){
              $dumpsql[] = $insertions;
            }
          }
        }
        return implode("\r", $dumpsql);
    }
    $fp =fopen("$db_name.sql",'w+');
    $sauvegarde=svg_bdd($db_server,$db_username,$db_password,$db_name);
    fwrite($fp, $sauvegarde);
    fclose($fp);
    $sujet='backup agenda mairie';
    $file=$db_name.'.sql';
       $email_expediteur='adresse expédition';
         $email_reply='adresse de réponse';
         $message_texte='Bonjour,'."\n\n".'Voici un mail avec la backup ';
     
         $message_html='<html>
         <head>
         <title>backup</title>
         </head>
         <body>Bonjour, voici un mail avec la backup.</body>
         </html>';
     
         //-----------------------------------------------
         //GENERE LA FRONTIERE DU MAIL ENTRE TEXTE ET HTML
         //-----------------------------------------------
     
         $frontiere = '-----=' . md5(uniqid(mt_rand()));
     
         //-----------------------------------------------
         //HEADERS DU MAIL
         //-----------------------------------------------
     
         $headers = 'From: "backup" <'.$email_expediteur.'>'."\n";
         $headers .= 'Return-Path: <'.$email_reply.'>'."\n";
         $headers .= 'MIME-Version: 1.0'."\n";
         $headers .= 'Content-Type: multipart/mixed; boundary="'.$frontiere.'"';
     
         //-----------------------------------------------
         //MESSAGE TEXTE
         //-----------------------------------------------
         $message = 'This is a multi-part message in MIME format.'."\n\n";
     
         $message .= '--'.$frontiere."\n";
         $message .= 'Content-Type: text/plain; charset="iso-8859-1"'."\n";
         $message .= 'Content-Transfer-Encoding: 8bit'."\n\n";
         $message .= $message_texte."\n\n";
     
         //-----------------------------------------------
         //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";
     
         $message .= '--'.$frontiere.'--'."\n";
     
         //-----------------------------------------------
         //PIECE JOINTE
         //-----------------------------------------------
     
         $message .= "Content-Type: image/gif; name=\"$file\""."\n";
    $message .= "Content-Disposition:attachement; filename=\"$file\""."\n\n";
         $message .= "Content-Transfer-Encoding: base64"."\n";
    $taille_modele = filesize($file);
    $fp = fopen($file, "r");   // b c'est pour les windowsiens
    $attachment = fread($fp, $taille_modele);
    fclose($fp);
     
         $message .= chunk_split(base64_encode($attachment))."\n";
    $message .= "--$frontiere--\n";
         if(mail('adresse destinataire',$sujet,$message,$headers))
         {
              echo 'Le mail a été envoyé';
         }
         else
         {
              echo 'Le mail n\'a pu être envoyé';
         } 
    unlink($file);
    ?>

  12. #12
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2007
    Messages : 282
    Points : 229
    Points
    229
    Par défaut
    Bonjour, je me permet de relancer la conversation pour avoir de l'aide. Quelqu'un verrais-t-il le problème de mon script?

  13. #13
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2007
    Messages : 282
    Points : 229
    Points
    229
    Par défaut
    Après avoir passer une semaine de partiel, je me remet sur ce script et je ne trouve toujours pas la provenance de mon problème.
    Si quelqu'un verrais le problème ou même si c'est une idée d'erreur probable, merci de m'aider.
    Cordialement,

Discussions similaires

  1. Sauvegarde d'un site web et de sa base de données et envoi par email
    Par syrinx75 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 09/03/2011, 20h11
  2. Sauvegarder une Base de données Oracle 8
    Par benjamin50 dans le forum Administration
    Réponses: 7
    Dernier message: 16/06/2009, 11h36
  3. [MySQL] Sauvegarde de base de données dans un fichier
    Par navis84 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 15/04/2006, 11h41
  4. Problème de sauvegarde de bases de données
    Par Gwipi dans le forum Administration
    Réponses: 2
    Dernier message: 09/09/2005, 08h30
  5. Sauvegarde des bases de données
    Par dcollart dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 27/07/2005, 06h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo