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 :

Inclure et auto évaluer un fichier php


Sujet :

Langage PHP

  1. #1
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Points : 12 815
    Points
    12 815
    Par défaut Inclure et auto évaluer un fichier php
    Bonjour à tous,

    Dans mon programme (index.php) j'envoie un email. Pour cela je construit un message au format texte et un au format html. Ca ressemble à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $message_text = '...';
    $message_html = '...';
    Comme mon email est long, je voudrais mettre le contenu dans des fichiers à part. Par exemple email_content_html.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <html>
      <body>
        <p>Bonjour <?=$prenom?>,</p>
        <p>...</p>
    ...
    Comme vous le voyez, j'ai $prenom dans le fichier.

    Ce que je cherche à faire, ce serait un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $message_html = evaluer('email_content_html.php');
    C'est possible ?

    Dans mes souvenirs (très vieux), il y avait une syntaxe à base de triple chevrons, mais je ne la retrouve pas. Deprecated ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $message_html <<< 'email_content_html.php';
    Quelqu'un peut m'aiguiller ?
    Th.
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

  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
    Ce dont tu parles est la syntaxe heredoc
    http://php.net/manual/fr/language.types.string.php
    Mais ce n'est pas ce que tu veux.


    Tu peux simplement écrire ton fichier comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $message_text = '<html>
      <body>
        <p>Bonjour ' . $prenom .',</p>
        <p>...</p>
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Points : 12 815
    Points
    12 815
    Par défaut
    Merci

    Je vais tester ça ce soir. Je devine que je peux faire un truc dans ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $message_html <<<"MSG_HTML"
    include('email_content_html.php');
    MSG_HTML
    Edit: ou plutôt ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ob_start();
    include 'email_content_html.php';
    $include = ob_get_contents();
    ob_end_clean();
     
    $message_html <<<"MSG_HTML"
    {$include}
    MSG_HTML
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

  4. #4
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Je devine que je peux faire un truc dans ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $message_html <<<"MSG_HTML"
    include('email_content_html.php');
    MSG_HTML
    Non, ça n'est pas possible, la syntaxe heredoc permet seulement d'évaluer des variables, rien d'autre. En fait c'est exactement la même chose qu'une chaîne entre double quotes.

    Une autre option possible est d'utiliser une chaîne formatée, ce qui permet de séparer le texte du code php. Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $str = "Bonjour, je m'appelle %s et j'aime bien %s.";
    $prenom = 'Maurice';
    $COD = 'les frites';
    $result = sprintf($str, $prenom, $COD);
    La seule contrainte de ce système, c'est qu'il faut bien respecter l'ordre des placeholders.

    Il y a également vsprintf qui permet d'utiliser un tableau de valeurs pour remplacer les placeholders.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $str = "Bonjour, je m'appelle %s et j'aime bien %s.";
    $values = array('Maurice', 'les frites');
    $result = vsprintf($str, $values);
    Ce qui peut s'avérer pratique quand on récupère des enregistrements via un base de données.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  5. #5
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Points : 12 815
    Points
    12 815
    Par défaut
    Nos messages se sont croisés ;-)
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

  6. #6
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Points : 12 815
    Points
    12 815
    Par défaut
    Je confirme que ça marche.

    Voici ce que j'ai fais

    tpl_email_inscription_html.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <p>Bonjour <?=$prenom?>,</p>
     
    <p>Votre inscription bla bla</p>
     
    <p>mode html</p>
    tpl_email_inscription_text.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Bonjour <?=$prenom?>,
     
    Votre inscription bla bla
     
    text
    et dans mon programme :
    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
     
     
    $to = 'thierryler@yahoo.com';
    $to2 = 'thierry';
    $from = 'noreply@profil4.com';
    $from2 = 'Profil4';
    $cc = 'noreply@profil4.com';
    $cc2 = 'Profil4'; 
    $subject = 'Inscription';
     
    ob_start();
    include 'tpl/tpl_email_inscription_text.php';
    $include_txt = ob_get_contents();
    ob_end_clean();
     
    ob_start();
    include 'tpl/tpl_email_inscription_html.php';
    $include_html = ob_get_contents();
    ob_end_clean();
     
    //$message_texte = 'message texte';
    $message_texte = <<< "MSG_TXT"
    {$include_txt}
    MSG_TXT;
     
    //$message_html='message html';
    $message_html = <<< "MSG_HTML"
    {$include_html}
    MSG_HTML;
     
     
    sendEmail($to, $to2, $from, $from2, $cc, $cc2, $subject, $message_texte, $message_html);
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

  7. #7
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Points : 12 815
    Points
    12 815
    Par défaut
    Par contre, le truc bizare, c'est que ça ne marche pas quand j'indente :

    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
    if(true) {
    	...	
     
    	// NE PAS INDENTER CE BLOC (DEBUT)		
    	$message_texte = <<< "MSG_TXT"
    	{$include_txt}
    	MSG_TXT;
     
    	$message_html = <<< "MSG_HTML"
    	{$include_html}
    	MSG_HTML;
    	// NE PAS INDENTER CE BLOC (FIN)
     
    	...
    }
    Ca dit :

    Parse error: syntax error, unexpected ']', expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in D:\webdev\profil4\website\signin.php on line 187
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

  8. #8
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Ce n'est pas bizarre, la syntaxe heredoc impose que le tag de fermeture soit au début d'une ligne. Donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if(true) {
    	$message_texte = <<< "MSG_TXT"
    	{$include_txt}
    MSG_TXT;
     	$message_html = <<< "MSG_HTML"
    	{$include_html}
    MSG_HTML;
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  9. #9
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Points : 12 815
    Points
    12 815
    Par défaut
    Je me demande les raisons pour lesquelles ils ont fait comme ça.
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

  10. #10
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Un des avantages de cette syntaxe est de s'affranchir des délimiteurs que sont les quotes, je pense que le fait d'exiger que le délimiteur de fin soit encadré par des nouvelles lignes (avec une virgule ou un point virgule à droite) suit cette même idée, on peut inclure le délimiteur dans la chaîne tant que celui-ci n'est pas encadré par deux nouvelles lignes. J'imagine bien un anglophone (ou pas) choisir le mot data comme délimiteur et utiliser ce même mot dans sa chaîne.

    À noter que l'on retrouve cette même contrainte dans d'autres langages comme par exemple en Ruby. Par contre en Python, on utilise les triples quotes et cette indentation n'a pas lieu d'être:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    s = '''Pendant que Jean fait chauffé la voiture,
     Janine finit d'emballer les sandwichs.'''
    Seule la succession de trois quotes devient problématique.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

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

Discussions similaires

  1. Rafraichissement auto d'un fichier php à partir d'un serveur web?
    Par Martyin dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 15/09/2007, 13h45
  2. Inclure un fichier php
    Par bodysplash007 dans le forum Langage
    Réponses: 2
    Dernier message: 18/04/2007, 11h19
  3. [VB] Inclure un fichier PHP
    Par Kernald dans le forum VB.NET
    Réponses: 7
    Dernier message: 02/02/2007, 19h40
  4. Inclure fichier php externe
    Par gazza dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 08/08/2006, 11h22

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