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 :

Include dynamique depuis variable [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 30
    Par défaut Include dynamique depuis variable
    Bonsoir,

    J'explique ce que je veux faire :

    J'ai une variable qui contient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $mavar = "<table><tr><td>%%youpi.php%%</td></tr></table>";
    J'aimerais que quand je fasse un :
    j'obtienne l'équivalent de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <table><tr><td><? include('youpi.php'); ?></td></tr></table>
    Comment faire cela ?

    Merci beaucoup

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $reg="#(%%)(.*)(%%)#"
    preg_replace($reg,"include('$2')",$mavar)
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 453
    Par défaut
    J'y connais vraiment rien aux RegEx
    Mais ce ne serait pas plutôt :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $reg="#(%%)(.*)(%%)#";
    preg_replace($reg,"<?php include('$2') ?>",$mavar);
    Rq : cela n'effectuera pas l'include, mais affichera bien <?php include('monfichier'); ?> dans l'HTML

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    exact ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    mais après je ne pense pas qu'il 'interprète ^^
    peut etre avec un modifier e ..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $reg="#(%%)([^%]*)(%%)#e";
    $mavar= preg_replace($reg, "include('$2')",$mavar)
    je savais bien que j'etais pas a coté sans mes balises php
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  6. #6
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Bonsoir,

    Je pense qu'il désire réellement appeler la fonction include :

    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
     
    function token_replace($match){
        if(empty($match[2]) || !file_exists($match[2])) return '';
        ob_start();
            include($match[2]);
            $c = ob_get_contents();
         ob_end_clean();
        return $c;
    }
     
    $subject = "<table><tr><td>%%youpi.php%%</td></tr></table>";
    $pattern = '/(%%)([^%]{1,})(%%)/';
    // $pattern = '/(%%)(.*?)(%%)/'; 
     
    $subject = preg_replace_callback($pattern, 'token_replace', $subject);
    J'ai pas testé mais c'est dans l'idée.

    À bientôt,

  7. #7
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    preg_replace_callback ou e même combat
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  8. #8
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Ha ok pour le "e" en fin de Regex.

    Par contre cela ne fonctionne que losrqu'il n'y a qu'un %%(.*?)%% à remplacer. Et cela ne conserve pas ce qu'il y a autour.

    Ca met directement include dans le flux aussi, ca ne l'insère pas dans la chaine.

    Je crois que preg_replace_callback sert à résoudre ce genre de souci. Include ne retourne pas le script dans son état généré.

  9. #9
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    Bon juste un petit exemple car j'ai l'impression que le post précédetn n'a pas été compris à la hauteur de ses espérances :

    la page principale:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    function callback_reg($file){
    	return include($file);
    }
    $mavar="<div>%%testinclude.php%%</div>";
    $reg="#%%([^%]*)%%#e";
    $res=preg_replace($reg,"callback_reg('$1')",$mavar);
    ?>
    la page incluse:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    $contenu="le contenu du div";
    echo $contenu;
    ?>
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  10. #10
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    Aie !

    Bon le souci est que le include est traité dans le replcae et ne focntionne pas comme espéré ..

    on peut soit faire un file get contents si le contenu ne doit pas etre interprété :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?php
     
    function callback_reg($file){
    	 return file_get_contents($file);
    }
     
    $mavar="<div>%%testinclude.php%%</div>";
    $reg="#%%([^%]*)%%#e";
    $res=preg_replace($reg,"callback_reg('$1')",$mavar);
    echo $res;
    ?>
    valable pour du html ou du texte

    Sinon le système du buffer de thom est obligatoire:

    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
     
    <?php
     
    function callback_reg($file){
    	 ob_start();
            include($file);
            $c = ob_get_contents();
         ob_end_clean();
        return $c;
     
    }
     
    $mavar="<div>%%testinclude.php%%</div>";
    $reg="#%%([^%]*)%%#e";
    $res=preg_replace($reg,"callback_reg('$1')",$mavar);
    echo $res;
    ?>
    du coup le php dans le fichier inclu est interprété


    Thom à trouvé un article qui précisé que si il y a plusieurs occurences à
    remplacer il est préférable de passer par le preg_replace_callback() qui evites de reinterpéter à chaque fois le callback par rapport à le methode du modiifer e qui reinterprètera à chaque fois le la focntion callback
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  11. #11
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Quel ouf ce SF

    Donc oui tu as tout à fait raison, cela donnera l'équivalent, néanmoins :

    Note that it is in most cases much more efficient to use preg_replace_callback(), with a named function or an anonymous function created with create_function(), instead of the /e modifier. When preg_replace() is called with the /e modifier, the interpreter must parse the replacement string into PHP code once for every replacement made, while preg_replace_callback() uses a function that only needs to be parsed once.

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 9
    Par défaut
    Merci beaucoup,
    même 1 an après, cela m'a été très utile !!

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

Discussions similaires

  1. [Toutes versions] Validation de données dynamiques depuis une variable String
    Par bravojr dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/12/2013, 15h48
  2. [Mail] Mettre un include dans une variable
    Par Death83 dans le forum Langage
    Réponses: 16
    Dernier message: 04/03/2006, 20h01
  3. [Language]Nom dynamique de Variable
    Par brooks dans le forum Langage
    Réponses: 13
    Dernier message: 14/12/2005, 18h09
  4. Include dynamique
    Par Stephane_br dans le forum ASP
    Réponses: 2
    Dernier message: 02/12/2005, 09h29
  5. [jsp] include dynamique dans une jsp
    Par petitelulu dans le forum Servlets/JSP
    Réponses: 9
    Dernier message: 04/03/2005, 07h59

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