- Fil d'ariane : Accueil du devBlog
- / Détail du billet (Lien direct)
Pseudo Frames en pratique : includes sécurisés
En PHP, on a souvent recours à ce qu'on appelle communément les pseudo frames. Elles permettent de gagner un temps appréciable au niveau de la maintenance et également dans le travail d'intégration. Il est fort possible d'aller plus loin et d'améliorer considérablement la maintenance, et c'est ce que nous allons voir.
Mise en situation
Rien de mieux qu'un exemple:
Essayons de mettre en place une documentation concernant quelques fonctions PHP. A chaque fonction correspondra une page dans laquelle il y aura une description la concenant.
Afin d'intégrer cette documentation au design général de mon site, j'utilise un système d'inclusion de fichier.
Les pages décrivant les fonctions seront quand à elles stockées dans un sous répertoire includes.
Voici la structure des fichiers:

Méthode répandue
Le plus souvent voici comment les pseudos frames sont géréés:
// Contrôle du paramètre passé via l'URL
if (isset($_GET["page"])) {
switch ($_GET["page"]) {
case "in_array":
$includePage = "in_array.inc.php";
break;
case "glob":
$includePage = "glob.inc.php";
break;
case "str_pad":
$includePage = "str_pad.inc.php";
break;
default :
// Gestion de l'erreur : soit inclusion d'une page par défaut soit message d'erreur
break;
}
}
// Inclusion de la page demandée
include "./includes/" . $includePage;
Il existe aussi une variante consistant à n'utiliser que des structures de contrôles à base de if
...
Dans les deux cas cela peut devenir vite complexe à gérer surtout si on a un grand nombre de pages à inclure. Aussi voici une technique pour que la quantité de pages ne soit plus un souci.
Quel est le tableau?
Après avoir au préalable adopté une norme pour les noms des pages - ici le nom de la fonction suivi de ".inc.php" - Il nous suffit de lister tous les fichiers répondant au filtre dans le répertoire includes. Les résultats seront alors stockés dans un tableau dans lequel nous aurons la liste de toutes les pages autorisés
Grâce à la fonction glob(), la moitié du chemin est faite. Ensuite il suffit de chercher si la page demandée est présente dans la liste ainsi générée.
define("PATH", "./includes/");
// Tableau contenant les pages autorisées
$tableau = glob(PATH . "*.inc.php");
if (isset($_GET["page"]) && in_array(PATH . $_GET["page"] . ".inc.php", $tableau)) {
$pageInclude = PATH . $_GET["page"] . ".inc.php";
}
else {
$pageInclude = PATH . "default.inc.php";
}
include $pageInclude;
Grâce à cette méthode vous n'aurez pas à vous soucier du nombre de pages à inclure, il suffira de les nommer selon le masque défini.
Si vous vous sentez l'âme d'un "geek", vous pouvez toujours écrire le code sous cette forme:
define("PATH", "./includes/");
// Tableau contenant les pages autorisées
include (isset($_GET["page"]) && in_array(PATH . $_GET["page"] . ".inc.php", glob(PATH . "*.inc.php"))) ? PATH . $_GET["page"] . ".inc.php" : PATH . "default.inc.php";
Le résultat sera le même mais le tout tient sur deux lignes
.
Ne pas oublier
- Pour voir l'exemple, cliquez ici
- Télécharger l'exemple complet : ici
- Je vous renvoi à ce petit tutorial d'ElMoustiko si vous désirez en savoir plus sur les pseudos frames.
Mise à jour
Commentaires
[#1] Commentaire rédigé le Dimanche 21 Novembre 2004 à 18:28 par ElMoustiko
[#3] Commentaire rédigé le Dimanche 21 Novembre 2004 à 18:48 par ElMoustiko
Je sais même pas comment on fait un bench
Pour revenir à mon histoire de template XML, il me reste à savoir comment faire un rendu xhtml à partir de mes fichiers XML et XSL pour pouvoir l'utiliser, t'as une idée ?
[#5] Commentaire rédigé le Dimanche 21 Novembre 2004 à 19:11 par ElMoustiko
Ce que j'entend par template, et bien on a QUE le contenu dans des balises logiques (genre <titre>, <date>, <article>, ...) et ensuite on fait le traitement XSLT pour faire du bon vieux xHTML pour rendre le tout. Ca permet de n'avoir vraiment que la donnée utilisable n'importe comment ensuite (html, pdf, ...). On peut comme ceci, générer des menus (<categorie>, <item>, <subitem>, ...) et faire de même etc pour chaque partie de la page et générer les correspondance HTML via PHP je pense mais de quelle manière, bonne question...
[#7] Commentaire rédigé le Dimanche 21 Novembre 2004 à 19:24 par ElMoustiko
Wé c'est clair qu'un topic sur alsa serait l'idéal mais à vrai dire j'en parlais parceque ça avait un rapport étroit avec le truc
Sinon t'as fait le bench ? pour comparer les 2 systèmes de pseudo frames ?
[#8] Commentaire rédigé le Dimanche 21 Novembre 2004 à 19:35 par ElMoustiko
http://www.phpindex.com/articles/articles_lire.php...
Je pense qu'on à tout sous la pogne, y a plus qu'a digérer, comprendre et mettre en oeuvre.
Un truc qui me fait plaisir, c'est que mon idée de template XML est la même que celle évoquée en fin d'article sur le lien pré-cité.
[irc]/me est content[/irc]
[#10] Commentaire rédigé le Lundi 22 Novembre 2004 à 13:07 par Clames
[#11] Commentaire rédigé le Jeudi 20 Janvier 2005 à 15:04 par Alexi
[#12] Commentaire rédigé le Mercredi 15 Juin 2005 à 14:36 par KneXtasY
Niveau sécurité, c'est mieux que de mettre directement l'adresse dans le get
[#13] Commentaire rédigé le Mardi 05 Juillet 2005 à 14:55 par E²xiT
Je voudrai savoir comment modifier le code pour que l'inclusion apparaisse sous chaque lien sorrespondant ?
Merci beaucoup.
[#14] Commentaire rédigé le Mercredi 14 Septembre 2005 à 18:14 par Olivier Cartagena
Je t'écris car j'ai un petit problème et apparemment c'est lié à ton système d'include que j'utilise sur mon site (qui marche à la perfection par ailleurs) bref, je suis en train de développer un livre d'or pour mon site et donc la première partie, c'est à dire aller chercher les messages dans la bdd, ça marche parfaitement mais dès que je veux afficher seulement une partie des messages (5 par exemple) et diviser par pages différentes, là ça n'affiche plus aucun message. J'ai déjà posté sur media-box mais je n'obtiens aucune aide. Aurais tu une idée de ce que ça peut-être?
[#15] Commentaire rédigé le Mercredi 28 Septembre 2005 à 16:31 par Mayday
Par contre, j'ai toujours le même probleme et l'un d'entre vous va surement me donner la solution : Si j'envoie index.php?page=test?var1=truc&var2=machin
Je voudrais récupérer dans ma page test.inc.php les valeurs de var1 et var2
Il doit bien y avoir une méthode toute simple mais je pédale là !
Merci pour vos lumières.
[#17] Commentaire rédigé le Mercredi 28 Septembre 2005 à 17:09 par Mayday
Je sors.
PS : merci beaucoup pour ta rapidité !
[#18] Commentaire rédigé le Mardi 04 Octobre 2005 à 18:27 par E²xiT
Voila, sur mon site, j'ai une rubrique astuces et je voudrai que l'astuce apparaisse sous son nom.
Je ne sais pas comment faire.
Merci bien
[#20] Commentaire rédigé le Samedi 08 Octobre 2005 à 03:39 par pierito
Voilà, je suis un débutant total ayant un site, le mien, à finaliser.
Je veux utiliser l'un des modes "include".
L'"include" doit se réaliser A L'intérieur d'une page.
C'est à dire une partie avant et après l' "include" doit être la page original.
Il est donc nécessaire de mettre un 1er code au début, au bon endroit (l'un de ceux que vous indiquez) , puis un autre code pour conclure avant la fin de la page.
Quel est-il ? Que peux-il être ?
[#22] Commentaire rédigé le Lundi 21 Novembre 2005 à 19:12 par E²xiT
Merci bien.
[#23] Commentaire rédigé le Dimanche 11 Décembre 2005 à 20:34 par Ueaki
[#24] Commentaire rédigé le Lundi 12 Décembre 2005 à 07:49 par Ueaki
[#26] Commentaire rédigé le Lundi 12 Décembre 2005 à 12:38 par Ueaki
[#27] Commentaire rédigé le Lundi 12 Décembre 2005 à 17:04 par ToTo
in_array
glob
str_pad ? si oui il serve a quoi ?
Merci d'avance
[#29] Commentaire rédigé le Mercredi 14 Décembre 2005 à 09:13 par ToTo
[#30] Commentaire rédigé le Mercredi 14 Décembre 2005 à 09:30 par Marin
[#31] Commentaire rédigé le Mercredi 14 Décembre 2005 à 09:35 par Marin
[#32] Commentaire rédigé le Mercredi 14 Décembre 2005 à 10:16 par Ploup
je voudré savoir comment autorisé
toute les page de mon serveur
Merci d'avance
[#34] Commentaire rédigé le Jeudi 15 Décembre 2005 à 19:35 par Sauron
define("PATH", "./includes/" ) ;
L'ajout de commentaire a été désactivé pour ce billet.
Trackbacks
Pisteurs vers ce billet (trackbacks entrant)
Il n'y a pas encore de pisteurs pour ce billet.
Pistés par ce billet (trackbacks sortant)
Il n'y a pas encore de pisteurs effectué par ce billet.


Je me pose la question parcequ'à vrai dire je n'y connait pas grand chose en temps d'execution et surcharge serveur, donc si tu pouvais m'éclairer.
Sinon, je pense imaginer un système template+pseudo frame grâce à XML, XSL et PHP, mais c'est encore à l'état de projet
Ahh oui aussi, le lien pour le tutoriel, c'est celui là, je l'ai mis à jour, faudrat que je fasse les modifs de lien un de ces
http://www.elmoustikoblog.net/tutoriels/php/pseudo...