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 :

echo php dans variable


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    apprenti ;-)
    Inscrit en
    Octobre 2016
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : apprenti ;-)

    Informations forums :
    Inscription : Octobre 2016
    Messages : 39
    Points : 17
    Points
    17
    Par défaut echo php dans variable
    Bonjour tout le monde,

    Je viens poster ici ce soir concernant un soucis de Language php.

    Je tente d'envoyer un mail PHP contenant du texte HTML avec des images.

    Ne souhaitant pas mettre QUE les liens mais envoyer réellement les images, j'ai décidé de les encoder en Base64 pour ensuite les envoyer.

    Voici mon code(sans la fonction mail):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <php
    // Get the image and convert into string 
    $img = file_get_contents( 
    '../images/chien.jpg'); 
    // Encode the image string data into base64 
    $data = "'data:image/jpeg;base64,".base64_encode($img)."'"; 
     
     
    ?>
     
    <img src=<?php echo $data;?> width="407" height="100" alt="" style="display:block; border:0; margin:0;">
    Donc jusque là pas de soucis, cela fonctionne.

    Par contre ensuite je souhaite mettre le contenu de mon HTML dans la variable $message de mon mail.

    Du coup j'ai tenté ceci(je n'ai pas mis tout le code car le reste est fonctionnel et je ne veux pas "polluer") :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // Get the image and convert into string 
    $img = file_get_contents( 
    '../images/chien.jpg'); 
    // Encode the image string data into base64 
    $data = "'data:image/jpeg;base64,".base64_encode($img)."'"; 
     
    $message .='<img src='.echo $data.' width="407" height="100" alt="" style="display:block; border:0; margin:0;">';
    Ce que j'ai constaté c'est que :

    Si je ne met pas le echo ( même dans mon premier script), cela ne fonctionne pas.
    En revanche le echo pose soucis car j'ai l'impression qu'il n'est pas possible le mettre dans une variable.

    Comment ferriez-vous?

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    dans le premier contexte, echo est obligatoire, tu es hors PHP, tu nages dans le HTML
    dans le second contexte, echo n'est pas du tout approprié, tu fais une simple concaténation : echo déclenche l'envoi des en-têtes et des données au client.
    Tu peux essayer comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $message .= <<<html
    <img src="{$data}" width="407" height="100" alt="" style="display:block; border:0; margin:0;">
    html;

  3. #3
    Membre à l'essai
    Homme Profil pro
    apprenti ;-)
    Inscrit en
    Octobre 2016
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : apprenti ;-)

    Informations forums :
    Inscription : Octobre 2016
    Messages : 39
    Points : 17
    Points
    17
    Par défaut
    rawsrc , merci pour ta réponse! ;-)

    J'avoue que je ne comprend pas ton bout de code du coup je l'ai copié "bêtement " à la place du mien.

    J'ai testé et mon retour est que la page ne se lance pas(page blanche)...

    J'ai sans doute oublié quelque chose..

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    C'est la notation heredoc.
    Sur ta page blanche fait un CTRL+U pour voir le code source derrière.
    Et pense aussi à regarder les logs de ton serveur, c'est une vraie mine d'informations sur les problèmes.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1- rawsrc aime beaucoup la notation heredoc...
    Mais là, il a mis html: au lieu de html; !

    2- Sinon, tu peux aussi écrire simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $message .= '<img src='.$data.' width="407" height="100" alt="" style="display:block; border:0; margin:0;">';

  6. #6
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Et ouais 2 touches côte-à-côte, et ben comme j'ai les doigts palmés parfois je ripe

  7. #7
    Membre à l'essai
    Homme Profil pro
    apprenti ;-)
    Inscrit en
    Octobre 2016
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : apprenti ;-)

    Informations forums :
    Inscription : Octobre 2016
    Messages : 39
    Points : 17
    Points
    17
    Par défaut
    Bonjour jreaux62 oui j'ai remarqué ;-) ça arrive ^^

    Du coup j'ai testé plusieurs chose...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $name = "none61";
     
    $message = <<<EOT
      <p>Mon pseudo est "$name"</p>
    EOT;
    Ce qui fonctionne car dans le corp de mon mail je récupère bien none61

    Du coup j'ai testé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $message = <<<EOT
      <img src="echo $data" width="407" height="100" alt="" style="display:block; border:0; margin:0;">
    EOT;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $message = <<<EOT
      <img src="$data" width="407" height="100" alt="" style="display:block; border:0; margin:0;">
    EOT;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $message = <<<EOT
      <img src="{$data}" width="407" height="100" alt="" style="display:block; border:0; margin:0;">
    EOT;
    Cela ne fonctionne pas..j'ai du coup essayé ceci (juste pour voir si mon image s'affichée bien):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $link = "https://helpx.adobe.com/content/dam/help/en/stock/how-to/visual-reverse-image-search/jcr_content/main-pars/image/visual-reverse-image-search-v2_intro.jpg";
     
    $message = <<<EOT
      <img src="$link" width="407" height="100" alt="" style="display:block; border:0; margin:0;">
    EOT;

    Merci à vous

  8. #8
    Membre à l'essai
    Homme Profil pro
    apprenti ;-)
    Inscrit en
    Octobre 2016
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : apprenti ;-)

    Informations forums :
    Inscription : Octobre 2016
    Messages : 39
    Points : 17
    Points
    17
    Par défaut
    J'au aussi testé ta solution jreaux62 mais je reçois un mail avec un corp vide.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Ça fait partie des bases du PHP...



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // Get the image and convert into string 
    $img = file_get_contents('../images/chien.jpg'); 
    // Encode the image string data into base64 
    $img64 = base64_encode($img); 
     
    $message .= '<img src="data:image/jpeg;base64,'.$img64.'" width="407" height="100" alt="" style="display:block; border:0; margin:0;">';
    Dernière modification par Invité ; 10/11/2019 à 13h37.

  10. #10
    Membre à l'essai
    Homme Profil pro
    apprenti ;-)
    Inscrit en
    Octobre 2016
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : apprenti ;-)

    Informations forums :
    Inscription : Octobre 2016
    Messages : 39
    Points : 17
    Points
    17
    Par défaut
    jreaux62 merci pour le lien ^^

    Blague à part, je sais bien a quoi servent les points en Php, et oui ton code fonctionne dans une page php si par exemple je fais un
    Dans ce cas pas de soucis l'image s'affiche bien mais lorsque $message est le corps d'un mail, cela ne fonctionne pas.

    J'ai testé de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    // Get the image and convert into string 
    $img = file_get_contents('../images/chien.jpg'); 
    // Encode the image string data into base64 
    $img64 = base64_encode($img); 
     
    $message = <<<html
      $data
      
    html;
    Et le code "base64" s'affiche pourtant bien dans le corps du message.

    En clair , je n'arrive pas a interpréter la variable $data en tant que source pour la balise "img" SEULEMENT lorsque cette dernière est envoyé dans le corps d'un email HTML.

  11. #11
    Invité
    Invité(e)
    Par défaut
    A aucun moment tu as montré comment tu utilises la fonction mail()...
    (les headers)

  12. #12
    Membre à l'essai
    Homme Profil pro
    apprenti ;-)
    Inscrit en
    Octobre 2016
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : apprenti ;-)

    Informations forums :
    Inscription : Octobre 2016
    Messages : 39
    Points : 17
    Points
    17
    Par défaut
    Voici le leader de mon mail
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $headers  = 'MIME-Version: 1.0' . "\n"; // Version MIME
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
    $headers .= 'Reply-To: '.$expediteur."\n"; // Mail de reponse
    $headers .= 'From: "Nom_de_expediteur"<'.$expediteur.'>'."\n"; // Expediteur
    $headers .= 'Delivered-to: '.$destinataire."\n"; // Destinataire
    $headers .= 'Cc: '.$copie."\n"; // Copie Cc
    $headers .= 'Bcc: '.$copie_cachee."\n\n"; // Copie cachée Bcc
    Pour infos j'ai "inspecté l'élément" avec firefox et j'ai une erreur : SrcNullOrEmpty

    De ce que je suis en train de fouiller sur le net il semblerait qu'en faite mon problème soit du au fait que Outlook version web ne gère pas les images en base64...

    Ducoup je ne sais pas trop si je dois continuer dans cette voie ou alors me tourner ver les "cid" pour l'envoie des images...

  13. #13
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    L'autre soluce universelle c'est d'héberger les images sur un serveur et les mettre en liens dans le corps du mail.

  14. #14
    Membre à l'essai
    Homme Profil pro
    apprenti ;-)
    Inscrit en
    Octobre 2016
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : apprenti ;-)

    Informations forums :
    Inscription : Octobre 2016
    Messages : 39
    Points : 17
    Points
    17
    Par défaut
    Oui ça je sais faire mais ça ne colle pas avec ce que je souhaite .

  15. #15
    Membre à l'essai
    Homme Profil pro
    apprenti ;-)
    Inscrit en
    Octobre 2016
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : apprenti ;-)

    Informations forums :
    Inscription : Octobre 2016
    Messages : 39
    Points : 17
    Points
    17
    Par défaut
    Re

    Bon après moultes essais et recherches...j'ai enfin trouvé une solution qui fonctionne !!!

    Voici le code
    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
     
     
    <!DOCTYPE html>
    <html>
    <head>
    	<title>test</title>
    </head>
    <body>
     
    <?php 
     // on génère une frontière
      $boundary = '-----=' . md5( uniqid ( rand() ) );
      // on génère un identifiant aléatoire pour le fichier
      $file_id  = md5( uniqid ( rand() ) ) . $_SERVER['SERVER_NAME'];
     
      // on va maintenant lire le fichier et l'encoder
      $path = '../images/photo1.jpg'; // chemin vers le fichier
      $fp = fopen($path, 'rb');
      $content = fread($fp, filesize($path));
      fclose($fp);
      $content_encode = chunk_split(base64_encode($content));
     
      $headers  = "From: \"toto\"<XXXX@hotmail.fr>\n";
      $headers .= "MIME-Version: 1.0\n";
      $headers .= "Content-Type: multipart/related; boundary=\"$boundary\"";
     
      $message  = "Ceci est un message au format MIME 1.0 multipart/mixed.\n\n";
      $message .= "--" . $boundary . "\n";
      $message .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
      $message .= "Content-Transfer-Encoding: 8bit\n\n";
      $message .= "<html><body>Salut Alphonse, <br><br>";
      $message .= "Voila le fichier que tu m'as demandé :<br>";
      $message .= "<img src=\"cid:$file_id\" alt=\"le fichier demandé\"><br>";
      $message .= "<br>@+";
      $message .= "\n\n";
      $message .= "--" . $boundary . "\n";
      $message .= "Content-Type: image/gif; name=\"fichier.gif\"\n";
      $message .= "Content-Transfer-Encoding: base64\n";
      $message .= "Content-ID: <$file_id>\n\n";
      $message .= $content_encode . "\n";
      $message .= "\n\n";
      $message .= "--" . $boundary . "--\n";
     
      mail('XXXX@hotmail.fr', 'le fichier demandé', $message, $headers);
    ?>
     
    </body>
    </html>
    Par contre j'ai essayé de modifier la page pour envoyer plusieurs image mais pour le moment ça coince...

  16. #16
    Membre à l'essai
    Homme Profil pro
    apprenti ;-)
    Inscrit en
    Octobre 2016
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : apprenti ;-)

    Informations forums :
    Inscription : Octobre 2016
    Messages : 39
    Points : 17
    Points
    17
    Par défaut
    Bon du coup j'y arrive je pense qu'il y a moyen de faire plus simple mais bon..ça fait le job !! ;-)

    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
     
     
    <!DOCTYPE html>
    <html>
    <head>
    	<title>test</title>
    </head>
    <body>
     
    <?php 
     // on génère une frontière
      $boundary = '-----=' . md5( uniqid ( rand() ) );
      // on génère un identifiant aléatoire pour le fichier
      $file_id  = md5( uniqid ( rand() ) ) . $_SERVER['SERVER_NAME'];
    $file_id2  = md5( uniqid ( rand() ) ) . $_SERVER['SERVER_NAME'];
      // on va maintenant lire le fichier et l'encoder
      $path = '../images/photo.jpg'; // chemin vers le fichier
      $fp = fopen($path, 'rb');
      $content = fread($fp, filesize($path));
      fclose($fp);
      $content_encode = chunk_split(base64_encode($content));
     
      $path2 = '../images/photo2.jpg'; // chemin vers le fichier
      $fp2 = fopen($path2, 'rb');
      $content2 = fread($fp2, filesize($path2));
      fclose($fp2);
      $content_encode2 = chunk_split(base64_encode($content2));
     
      $headers  = "From: \"toto\"<XXXX@hotmail.fr>\n";
      $headers .= "MIME-Version: 1.0\n";
      $headers .= "Content-Type: multipart/related; boundary=\"$boundary\"";
     
      $message  = "Ceci est un message au format MIME 1.0 multipart/mixed.\n\n";
      $message .= "--" . $boundary . "\n";
      $message .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
      $message .= "Content-Transfer-Encoding: 8bit\n\n";
      $message .= "<html><body>Salut Jo, <br><br>";
      $message .= "J'arrive ENFIN à envoyer les images et que celles-ci soient chargées depuis a l'interieur du mail !! ;-)<br>";
      $message .= "<img src=\"cid:$file_id\" alt=\"le fichier demandé\"><br>";
      $message .= "<img src=\"cid:$file_id2\" alt=\"le fichier demandé\"><br>";
      $message .= "<br>@+";
      $message .= "\n\n";
      $message .= "--" . $boundary . "\n";
      $message .= "Content-Type: image/gif; name=\"fichier.gif\"\n";
      $message .= "Content-Transfer-Encoding: base64\n";
      $message .= "Content-ID: <$file_id>\n\n";
      $message .= $content_encode . "\n";
      $message .= "--" . $boundary . "\n";
      $message .= "Content-Type: image/gif; name=\"fichier.gif\"\n";
      $message .= "Content-Transfer-Encoding: base64\n";
      $message .= "Content-ID: <$file_id2>\n\n";
      $message .= $content_encode2 . "\n";
      $message .= "\n\n";
      $message .= "--" . $boundary . "--\n";
     
      mail('XXX@hotmail.fr', 'le fichier demandé', $message, $headers);
    ?>
     
    </body>
    </html>
    Voilà ;-)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. php dans variable javascript
    Par xess91 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 27/05/2009, 11h19
  2. récupérer un echo php dans swf avec as3
    Par sanatou dans le forum ActionScript 3
    Réponses: 2
    Dernier message: 05/06/2008, 15h25
  3. [Tableaux] contenu page php dans variable
    Par Clorish dans le forum Langage
    Réponses: 10
    Dernier message: 06/06/2007, 12h13
  4. [PHP-JS] variable php dans du javascript ?????
    Par lipczynski dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 18/08/2005, 14h26
  5. [PHP-JS] Problème de variable PHP dans un script JS
    Par soad029 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 08/08/2005, 22h17

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