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 :

Evaluer un string text avec code PHP: Eval?!


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2006
    Messages : 70
    Points : 57
    Points
    57
    Par défaut Evaluer un string text avec code PHP: Eval?!
    Bonjour à toutes et à tous!

    J'espère que vous allez bien!
    Je ne sais pas trop si mon POST est hors charte... merci de me le signifier si c'est le cas ^^. Je reposterais dans un TOPIC plus approprié.

    Le contexte:
    Un moteur qui va chercher le contenu des pages dans la Base De Données [BDD par la suite].

    La problématique:
    Permettre de stocker des contenus composés entre autres d'instructions codées en PHP dans la BDD et de les rééxécuter par la suite.

    Ma question:
    Nan ne me sauter pas dessus ! Je connais la fonction eval() et ses effets .
    Mais ce n'est en faites pas éxactement ce que je veux :s.
    Je m'explique: le contenu dominant stocké dans la BDD est de type 'mise en page HTML'.
    En faites je stoque l'éxact équivalent du contenu d'un fichier include type 'bidon.inc.php'. Donc ce dernier contient des choses genre [exemple volontairement simple]:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <b>Un peu</b> de contenu lisible par l'utilisateur.
    <?
    echo 'De l'affichage généré par PHP';
    
    $textSQL = new elementSQL('requete blabla');
    $textfinal = 'test '.htmlentities($textSQL->resultat[0]['texte'],ENT_QUOTE);
    ?>
    <div>
     Voilà quoi!
    </div>
    ... Ca éxiste ?
    Je précise que la réponse souhaitée n'est apparament pas "Tu ne fais pas comme il faut! Stoque tes affichages sous forme 'echo "texte";'. Et ce pour la bonne et simple raison que le contenu en question est issu d'un WYSIWIG online (type HTMLArea) ne prennant pas en compte cet aspect.

    Merci d'avance pour vos éléments de réponse et autres pistes de reflexion.

  2. #2
    Rédacteur

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 695
    Points : 1 071
    Points
    1 071
    Par défaut
    Salut

    Premièrement, ton post n'est pas hors chartre et au contraire, plutôt bien fait. On manque pas d'infos pour t'aider.

    Pour en revenir à ton pb, as-tu penser à écrire un fichier à chaque fois, puis à l'inclure.
    par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // $page provient de ta BDD
    $filename = $nombre_aleatoire.'.php';
    $file = fopen($filename, 'a+');
    fwrite($file, $page);
    fclose($file);
    include $filename;
    unlink $filename;
    Bon, à réétudier, mais l'idée est là.
    Articles sur developpez.com
    - Gestion des exceptions avec PHP5
    - Chiffrement et hash en PHP contre l'attaque Man in the middle
    - Aedituus - Espace membre sécurisé en PHP5

  3. #3
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2006
    Messages : 70
    Points : 57
    Points
    57
    Par défaut Ha :D!
    Tou d'abord [politesse et convivialité oblige ]: merci wamania pour ton accueil et ta réponse [un quelconque lien de parenté avec Banania ou...? pardon //Boutade]!

    C'est marrant, j'ai eu la même idée aux alentours de 10h30, après quelques tirages de cheveux.
    Mais comme tu l'auras surement pris en compte toi même, cette solution est lourde en ressources machines :s. Ce qui, au delà de la contrainte technique, pourrait se traduire pour le visiteurs par des temps de chargement à rallonge en cas de visites multiples [même si le site en question n'en est pas là autant partir optimiste au sujet des visites et espérer donc avoir au moins deux ou trois utilisateurs simultanés ].
    Donc j'dirais que cette solution reste une issue de secours mais j'aimerais autant quelquechoses de plus "conventionnel".

    Dans le même ton j'ai eu cette idée: réécrire à l'interrieur du script PHP le contenu importé de la BDD et que ce dernier soit réévalué... mouarf ouais ça reviens à la problématique du eval();... :s.

    Tiens mais il me vient une autre idée [s'pas souvent mais quand ça arrive... ça arrive ]: tenter d'encadrer le contenu sauvegardé par des "?>contenu<?"... pour simuler une fermeture de code PHP puis une réouverture afin que ce dernier puisse être évaluer correctement... j'vais tester ça ^^! Et j'vous donnes le résultat !

  4. #4
    Rédacteur

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 695
    Points : 1 071
    Points
    1 071
    Par défaut
    Sinon, tu met les mains dans les REGEXP
    un truc du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if (preg_match_all('/<\?php(.*)\?>/', $page, $tab)
    {
        foreach...
        {
            $tabHTML[] = eval....
        }
    }
     
    preg_replace('/<\?php(.*)\?>/', ton HTML)
    Pareil, à retravailler, mais y a de l'idée
    Articles sur developpez.com
    - Gestion des exceptions avec PHP5
    - Chiffrement et hash en PHP contre l'attaque Man in the middle
    - Aedituus - Espace membre sécurisé en PHP5

  5. #5
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2006
    Messages : 70
    Points : 57
    Points
    57
    Par défaut Hihi :D!
    Devinez quoi?!

    Ca marche ^^!

    Donc voici une solution si toutes fois ça interesse d'autres personnes.

    Solution:
    afin de réévaluer un contenu externalisé [dans une BDD pour notre exemple] contenant un mélange de mise en page et d'instruction [code PHP à évaluer pour notre exemple] il suffit d'exporter ce contenu en l'encadrant de caractère de fermeture et d'ouverture de syntaxe [bien dans cet ordre, cad fermeture au début, ouverture en fin - dans notre exemple avec PHP "?>" et "<?"]

    Exemple:
    Soit le contenu suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Contenu sous test bdd 1
    <br />
    Test time() - <? echo time().'OK!'; ?>
    <?
    echo "\n\nFin\n\n";
    ?>
    -
    Il nous faut externalisé [comprendre "enregistré dans la BDD"] la valeur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ?>
    Contenu sous test bdd 1
    <br />
    Test time() - <? echo time().'OK!'; ?>
    <?
    echo "\n\nFin\n\n";
    ?>
    -
    <?
    Nous avons donc rajouter un ?> en début de chaine et un <? en fin de chaine.

    Dans un soucis de bonne tenue de ce forum je classe le sujet en "Résolu". Ce qui ne veut pas dire que d'autres solutions ne sont pas envisageables.
    Merci de nous faire part de toutes suggestion à ce sujet .

    Bonne journée!

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour,
    Je sais que le fil de discussion est ancien et je m'en excuse.

    Il faut entourer la chaine à évaluer des '?>' (avant) seulement.
    La fin n'est pas nécessaire. Il considère cela comme une chaine de caractère simple et elle n'a aucun effet.

    Voila, j'ai testé pour moi et ça marche parfaitement.

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

Discussions similaires

  1. Peupler une base de données avec un fichier texte (code PHP)
    Par fufumax dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 15/02/2015, 14h03
  2. MIPS -Affichage string mais avec code 11
    Par casimirmasque dans le forum Autres architectures
    Réponses: 2
    Dernier message: 22/11/2012, 16h15
  3. Problème avec code php
    Par thomash11 dans le forum Langage
    Réponses: 7
    Dernier message: 04/07/2012, 22h11
  4. [CS5] Modèle avec code PHP hors balise <HTML>
    Par nodules dans le forum Dreamweaver
    Réponses: 5
    Dernier message: 01/02/2012, 15h31
  5. Réponses: 2
    Dernier message: 16/07/2007, 16h04

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