Aller au contenu

Explication d'1 code


Sujets conseillés

Posté

Bonjour,

J'ai trouve dans un script un code que je souhaiterais bien le comprendre.

1 - Pourquoi on ne change pas ces deux lignes :

$html_header=InCludePageHtml("template/header.html");
eval("echo stripslashes(\"$html_header\");");

Tout simplement par cette ligne :

include 'template/header.html';

?

2 - Dans la fonction InCludePageHtml :

function InCludePageHtml($file) {
return addslashes(implode("",file("$file")));
   }

Pourquoi on lit le fichier a inclure par implode en ajoutant addslashes ?

3 - Apres cela on fait inverser le processus avec stripslashes ?

4- Pourquoi utiliser eval et echo en meme temps ?

Merci.

:)

Posté

Lu,

Qu'on ait 1 ou 1000 appel, on a que la fonction à modifier. Imagines toi remplacer l'appel de fonction par le même code ;-)

Posté

Ce que je voulais comprendre, c'est ce systeme d'integration de template c'est tout ;)

Posté

Lu,

En fait on n'utilise pas include() pour pouvoir insérer des donnés dans le template plus facilement.

Avec include le template contiendrai des <?php echo $ma_variable ?>

Avec ce code écrire $ma_variable sera plus court et plus clair

Ce code utilise une astuce dans php qui fait que les variables à l'intérieur de doubles guillemets sont décodées si elles existent.

Le addslashes permet quant à lui d'éviter les erreurs de syntaxes, car si un double guillemet existe dans un des template, il provequera surement une erreur de syntaxes avec eval.

Quant à la fonction InCludePageHtml() je pense qu'elle a été créée pour prévoir l'évolutivité au cas où on déciderait de classer les fichiers de template dans un autre dosier.

Posté

Oui c'est assez bien :) mais si tu compte t'en servir saches que tu ne devrait utiliser que des templates dont tu es sur du contenu.

Un template écrit par un visiteur serait une faille de sécurité car il pourrait afficher n'importe quelle variable variable de ton script (par exemple les variables qui contiennent le mot de passe de ta base de donné :s).

Posté

Merci Boo2M0rs0.

Y'a-t-il une difference entre inserer des fichiers dont l'extention est :

file.html

file.php

file.inc

file.inc.php

et est-ce qu'on doit changer la methode d'appeler un template pour chaque extention ?

Merci.

Posté

Il n'y a pas de différence, le script utilise file donc il prend le contenu tel quel;)

D'ailleurs si tu compte executer du code php dans ces fichiers finissant en .php, il ne sera pas interprété.

Posté

mais parfois on trouve meme du code php dans fichiers avec *.html ou *.inc ou *.inc.php

dans ce cas selon ton idee tout code php ne sera pas interpreter ?

Posté
mais parfois on trouve meme du code php dans fichiers avec *.html ou *.inc ou *.inc.php

dans ce cas selon ton idee tout code php ne sera pas interpreter ?

<{POST_SNAPBACK}>

En fait ça dépend de la manière dont est configuré le serveur apache. On peut faire interpréter du code php à toute sorte de fichiers. Ca dépend aussi des différentes inclusions.

Si on reste sur la config om seule l'extensions php peut interpréter du php, on peut imager que si tu inclus un fichier html contenant du code php dans un fichier php, le code sera interprété.

C'est à creuser donc ;)

Posté

Donc si je peux me permettre de dire :

lorsqu'il y'a du code php dans un template, quelque soit son extention, en l'integre directement avec INCLUDE :-

include 'templates/file.ext';

dans un cas general, ca veut dire seulement du code html, on doit recuper le contenu du fichier et le controler avant tout integration dans une page.

C juste au faux ?

Posté

La fonction 'eval' permet justement d'executer tout texte (ou fichier dans ce cas) comme une commande php. Autrement dit, s'il y a une variable dans ce code, elle sera comprise comme étant du 'code' valide.

S'il y a un problème, 'eval' renverra 'faux', mais pas d'erreurs.

Ce code permet donc d'executer du php à partir de tout fichier quelque soit son extension.

Posté

Je ne suis pas sur que eval gère les balises du php (<? , <?php et ?> ).

Chez moi il renvoi une erreur lorsque le code est faux du genre "Parse error: parse error, unexpected $ in index.php(6) : eval()'d code on line 1", mais je pense que cela dépend du niveau d'erreur choisi.

En plus ce code n'execute pas le code php de la page mais une commande echo qui a en argument le code de la page chargée. (les addslashes servent à éviter que le script ne soit détourné).

Peut être qu'en imaginant un exemple c'est plus facile à visualiser:

le code d'un template.htm:

<body>
<h1>$titre</h1>
<?php echo "<p>$texte</p>"; ?>
</body>

(oui je vous rassure c'est qu'un exemple pour prouver les limites de la chose :P)

On va dire que $titre = acceil et $texte = Page en construction

On charge la page dans :

Le code ne change pas.

On ajoute les slashs avant les doubles guillemets:

<body>
<h1>$titre</h1>
<?php echo \"<p>$texte</p>\"; ?>
</body>

On va créer une commande qui va être executé par eval elle contient:

echo "
<body>
<h1>$titre</h1>
<?php echo \"<p>$texte</p>\"; ?>
</body>";

Quand on voit ceci on se rend compte immédiatement que les balises <?php ne pourront pas être executés et cela ne va pas donner le résultats voulu:

<body>
<h1>Acceil</h1>
<?php echo "<p>Page en construction</p>"; ?>
</body>

Dans ce cas il aurait fallu utiliser la méthode include.

dans un cas general, ca veut dire seulement du code html, on doit recuper le contenu du fichier et le controler avant tout integration dans une page.

Je ne sais pas si include execute le php dans des fichiers qui n'ont pas .php à la fin (avec la configuration classique), à tester :/

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...