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 :

Que signifient ces balises php à l'intérieur d'un script php ?


Sujet :

Langage PHP

  1. #1
    Membre averti
    Homme Profil pro
    Architecte technique
    Inscrit en
    Avril 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Avril 2017
    Messages : 29
    Par défaut Que signifient ces balises php à l'intérieur d'un script php ?
    Bonjour,

    J'ai trouvé un bout de code qui pourrait m'être utile pour réaliser un petit script. Mais je vois dans ce bout de code un truc qui m'échappe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        public static function myContent ()
        {
    		$p = '<?php $id = $_ctx->posts->post_id;
    		echo $id ?>';
    		return $p;
        }
    Qu'est-ce donc que ce
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    		<?php $id = $_ctx->posts->post_id;
    		echo $id ?>
        }
    C'est la première fois que je vois une balise <?php ?> s'immiscer à l'intérieur d'une autre balise <?php ?>
    Qu'est-ce que ça signifie ?

    Merci d'avance pour vos lumières.

  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
    Par défaut
    Cette chaine est sûrement passée à la fonction eval() ensuite.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Homme Profil pro
    Architecte technique
    Inscrit en
    Avril 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Avril 2017
    Messages : 29
    Par défaut
    Salut sabotage,

    Je viens de lire la doc au sujet de cette fonction eval() que tu évoques. Je n'ai pas bien compris l'utilité de cette fonction qui parait être déconseillée.
    Ceci dit, ça pourrait bien être pour user de cette fonction que ces <?php ?> sont imbriquées, car le script en question est supposé insérer un bout de code personnalisé à l'intérieur d'un code d'affichage déjà existant (remplacer le contenu d'un billet par un autre contenu).

    Le code sera exécuté dans le scope du code appelant la fonction eval(). Aussi, toutes les variables définies ou modifiées dans l'appel à la fonction eval() resteront visibles après la fin de l'exécution de la fonction.
    "Scope du code" ?
    Il s'agit donc d'insérer des variables dont la valeur sera affectée par la fonction qui les appelle, mais sans pour autant que ces variables ne disparaissent à la fin de la fonction... Hem...

  4. #4
    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
    Par défaut
    non cela veut seulement dire que le code fourni à eval() est executé comme s'il était inclu.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre averti
    Homme Profil pro
    Architecte technique
    Inscrit en
    Avril 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Avril 2017
    Messages : 29
    Par défaut
    On pourrait donc changer ce morceau de code <?php ?> par un require_once() ?

  6. #6
    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
    Par défaut
    en gros: require() insère du code provenant d'un fichier ; eval() insère du code provenant d'une chaine.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre averti
    Homme Profil pro
    Architecte technique
    Inscrit en
    Avril 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Avril 2017
    Messages : 29
    Par défaut
    Et pourquoi utiliser une fonction plutôt que l'autre ?
    Et pourquoi utiliser eval() pour insérer une chaine ?
    Dans le code ci-dessus (premier post) qu'est-ce que ça changerait si nous avions un classique (j'enlève juste les balises <?php ?>) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
       public static function myContent ()
        {
    		$p = ' $id = $_ctx->posts->post_id;
    		echo $id';
    		return $p;
        }

  8. #8
    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
    Par défaut
    require traite un fichier, donc un code fixe.
    eval traite une chaine, donc du code qui peut être modifié à la volée et être stocké dans une base de données.

    Pour le dernier point, on ne met pas de balise pour démarrer eval(), s'il y en a ici (et s'il s'agit bien de passer cette chaine à eval(), ce qui n'est qu'une supposition), c'est peut être que cette chaine est raboutée à autre chose.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

    attention à ne pas faire de confusion.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    		$p = '<?php $id = $_ctx->posts->post_id;
    		echo $id ?>';
    		return $p;
    Ici, on a une chaine de caractères '.....................'.
    Les '<?php' et '?>' sont ici simplement des caractères, pas des balises PHP "actives".

  10. #10
    Membre averti
    Homme Profil pro
    Architecte technique
    Inscrit en
    Avril 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Avril 2017
    Messages : 29
    Par défaut
    Salut à vous !
    Citation Envoyé par sabotage Voir le message
    require traite un fichier, donc un code fixe.
    eval traite une chaine, donc du code qui peut être modifié à la volée et être stocké dans une base de données.
    .
    J'ai du mal à me représenter un "code qui peut être modifié à la volée". On peut passer des paramètres à un code à la volée, mais comment passer un code à la volée ? Cela voudrait dire qu'il existe une fonction - eval() en l'occurrence - qui permet à un quelconque endroit du script de faire tourner un code plutôt qu'un autre ? Mais j'en reviens alors à require_once() : si c'est pour changer le code selon des conditions, pourquoi ne pas faire inclure différents fichiers require au cas par cas ? Ou alors, c'est qu'on veut carrément laisser l'utilisateur insérer le code qu'il veut ? Mais alors, cette fonction est hyper dangereuse du point de vue de la sécurité.

    Citation Envoyé par jreaux62 Voir le message
    Bonjour,

    attention à ne pas faire de confusion.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    		$p = '<?php $id = $_ctx->posts->post_id;
    		echo $id ?>';
    		return $p;
    Ici, on a une chaine de caractères '.....................'.
    Les '<?php' et '?>' sont ici simplement des caractères, pas des balises PHP "actives".
    Observation pertinente. Mais à quoi peut-il donc servir d'insérer des caractères <?php ?> à l'intérieur d'un code où elles n'ont pas vocation à être affichée ? Ce code laisse entendre que le script écrit édite directement un fichier.php pour y insérer un bout de code qu'il inclut donc entre les balises <?php ?>
    C'est ça ?

  11. #11
    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
    Par défaut
    Mais alors, cette fonction est hyper dangereuse du point de vue de la sécurité.
    C'est bien ce que dit la documentation.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  12. #12
    Membre averti
    Homme Profil pro
    Architecte technique
    Inscrit en
    Avril 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Avril 2017
    Messages : 29
    Par défaut
    Citation Envoyé par sabotage Voir le message
    C'est bien ce que dit la documentation.
    Et donc, on l'utiliserait dans quel genre de cas ? Comment pourrait-on sécuriser un bout de code inséré par l'utilisateur ? Je ne suis pas concerné dans l'immédiat, mais bon c'est toujours bon à savoir.

    A part ça, j'ai d'autres questions plus importante (en ce qui me concerne) à propos du même script, si vous le voulez bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $core->tpl->addValue('myContent',array('myTpl','myContent'));
     
    class myTpl {
     
        public static function myContent ()
        {
    		$p = '<?php $id = $_ctx->posts->post_id;
    		echo $id ?>';
    		return $p;
        }
     
    }
    Comment traduiriez-vous ce code en bon français ? Si je m'y essaie, j'obtiens cela :
    "La variable $core -> fait "quelque chose" (quoi au juste) avec tpl (c'est quoi ? un nom de fichier ?) -> ce quelque chose consiste a appeler une fonction native nommée addValue. Cette fonction...
    J'ai du mal avec toute la ligne, en fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $core->tpl->addValue('myContent',array('myTpl','myContent'));
    En particulier, pourquoi a-t'on le nom de la classe et le nom de la fonction dans la même parenthèse ?

    Encore merci d'avance pour votre aide.

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

    en l'occurence, "...->post_id" semble être un ID, un identifiant, donc (à priori) numérique.

    Pas vraiment de quoi "casser la barraque" ni "se faire des cheveux blancs"...

  14. #14
    Membre averti
    Homme Profil pro
    Architecte technique
    Inscrit en
    Avril 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Avril 2017
    Messages : 29
    Par défaut
    Salut jreaux62,

    Oui, post_id est l'identifiant d'un billet, dans une table créée par Dotclear, en l'occurrence.
    Mais à vrai dire, ma question concerne davantage ces points là :

    • Ce signe " -> " signifie quoi déjà ? Jusqu'à maintenant je n'ai pas programmé en POO et je crois que cette syntaxe en est issue.
    • Cette ligne : $core->tpl->addValue('myContent',array('myTpl','myContent')); On la traduit comment au juste ? Je comprends "que l'on a une variable $core qui aurait pour valeur tpl (c'est quoi tpl) laquelle prendrait en paramètre le résultat d'une fonction addvalue() comportant à son tour une fonction et un tableau"...


    Le moins que l'on puisse dire, c'est que ma traduction est un peu amateuriste...

    Si vous pouvez faire mieux, je vous écoute...

Discussions similaires

  1. Que signifient ces lignes ?
    Par tapoza dans le forum Débuter
    Réponses: 10
    Dernier message: 12/01/2012, 00h06
  2. Que signifient ces messages d'erreurs ?
    Par dida_plt dans le forum Débuter
    Réponses: 5
    Dernier message: 04/12/2011, 14h45
  3. Que signifie ces lignes de codes ?
    Par Gnap69 dans le forum Débuter
    Réponses: 2
    Dernier message: 12/04/2010, 21h27
  4. Que signifie ces éléments dans l'interface graphique?
    Par flet le kid dans le forum Débuter
    Réponses: 2
    Dernier message: 01/05/2009, 20h33

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