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

Langage PHP Discussion :

Comment modifier mon code pour envoyer le Fichier en pièce jointe par email après le traitement ?


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 452
    Points : 66
    Points
    66
    Par défaut Comment modifier mon code pour envoyer le Fichier en pièce jointe par email après le traitement ?
    Bonjour.

    Mon code ci-dessous permet de générer des numéros enregistrés dans un fichier .csv et de forcer leur téléchargement d'un fichier au format .csv via le header du Navigateur Internet.

    Mais, vu que le téléchargement prend un certain temps avant que l'opération ne soit complète, l'utilisateur peut fermer par ERREUR le navigateur et donc ANNULER sans le savoir l'opération. Alors, en réfléchissant, j'ai pensé à envoyé le fichier qui devait être généré par EMAIL en pièce jointe.

    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
    $now = gmdate("D, d M Y H:i:s");
    header("Expires: Tue, 03 Jul 2001 06:00:00 GMT");
    header("Cache-Control: max-age=0, no-cache, must-revalidate, proxy-revalidate");
    header("Last-Modified: {$now} GMT");
     
    // force download  
    header("Content-Type: application/force-download");
    header("Content-Type: application/octet-stream");
    header("Content-Type: application/download");
     
    $filename = "numero.csv";
     
    // disposition / encoding on response body
    header("Content-Disposition: attachment;filename={$filename}");
    header("Content-Transfer-Encoding: binary");
     
    ob_start();
    $df = fopen("php://output", 'w');
     
    // pour mettre un entête sur le CSV
    $entetes = ['Numero'];
    fputcsv($df, $entetes);
     
    // numéro de base
    $numero         = (isset($_POST['numField'])) ? $_POST['numField'] : 0;
    // longueur souhaité (doit être plus grande que longueur de $numéro)
    $longueur_total = (isset($_POST['numLength'])) ? $_POST['numLength'] : 0;
    // longueur utilisé en retirant la longueur de base
    $longueur       = $longueur_total - strlen($numero);
    // calcule de la puissance de 10 en fonction de la longueur souhaité
    $max            = pow(10, $longueur);
    // affichage du maximun de tour de la boucle
    // echo "<h1>$max</h1>";
    for ($i = 0; $i < $max; $i++) {
        // différence de longueur
        $diff = $longueur - strlen($i);
        $zero = "";
        for ($a = 0; $a < $diff; $a++) {
            // ajout des zéro devant
            $zero .= "0";
        }
        // concaténation du résultat
        $resultat = $numero . $zero . $i;
        // effacement des zéro
        $zero     = "";
        // affichage du résultat
        $row = [$resultat];
        fputcsv($df, $row);
    }
    fclose($df);
    echo ob_get_clean();
    exit(0);
    Alors, aidez-moi svp à modifier ce code qui, au lieu de générer les numéros dans un Fichier .csv et forcer le téléchargement via le Navigateur Web, doit désormais envoyer automatiquement à l'adresse email renseignée, le fichier généré en pièce jointe de peur que le Navigateur soit fermé avant la génération totale de la liste des Numéros.

    Merci.

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    La solution la plus simple serait sans doute de générer le fichier dans ton serveur, dans un répertoire temporaire, avec un nom auto-généré (tu peux mettre la date dedans par exemple) Ensuite tu envoies ton mail en joignant ce fichier, puis tu effaces le fichier de ton serveur (ou tu prévois une purge qui supprime les vieux fichiers à date fixe)

    Cela dit, dans le cas d'un fichier CSV, ce n'est sans doute le téléchargement qui prend du temps, mais la génération du fichier. Du coup si ton utilisateur ferme la page pendant que le fichier se génère ça ne change rien au problème.
    Tu pourrais contourner le problème en faisant une demande asynchrone : tu peux par exemple insérer une information en base qui dit "générer et envoyer le fichier à tel utilisateur" et en parallèle une tâche planifiée qui regarde toutes les 10 minutes si il y a des fichiers à générer.

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 452
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par Celira Voir le message
    Tu pourrais contourner le problème en faisant une demande asynchrone : tu peux par exemple insérer une information en base qui dit "générer et envoyer le fichier à tel utilisateur" et en parallèle une tâche planifiée qui regarde toutes les 10 minutes si il y a des fichiers à générer.
    Merci beaucoup pour la réponse. Mais tout ceci reste flou pour moi.
    L'objectif est de contourner par tous les moyens le problème lors de la génération du fichier de sorte à ce qu'elle soit rapide CAR celle-ci avec du PHP brut est très lente.
    Comment donc pourrais-je le faire en lui ajoutant de l'ajax (Asynchrone) comme tu me le conseille ???
    Aidez-moi svp avec un exemple à partir de mon code ci-dessus. Ça me sera d'une très grande utilité.


    NB: mon projet ne fonctionne pas avec une Base de données. Il fonctionne simplement avec des formulaires HTML (auxquels je voulais ajouter un nouveau formulaire de type email qui n'existait pas) qui sont traités avec le Code PHP ci-dessus.

Discussions similaires

  1. Réponses: 6
    Dernier message: 27/08/2017, 22h37
  2. comment configurer mon MTA pour envoyer des mails?
    Par supcomingenieur dans le forum Réseau
    Réponses: 9
    Dernier message: 28/06/2013, 20h26
  3. Réponses: 0
    Dernier message: 29/05/2012, 13h01
  4. Réponses: 2
    Dernier message: 26/07/2011, 10h19
  5. Réponses: 3
    Dernier message: 16/07/2007, 20h41

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