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 ::mrgreen.
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.




















Impecab’ ! Mais ma méthode n’est elle pas plus rapide au niveau du temps d’execution ?? parceque là tu dois récupérer tous les fichiers *.inc.php, les mettre dans un tableau, et ensuite tester la correspondance et enfin l’inclusion
Avec le système que j’avais fait, on testait juste l’existence et on faisait telle ou telle action en fonction de l’existence ou non.
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_frame/
Jpense effectivement que ta méthode peut aller plus vite au niveau process mais il faudrait voir avec un Bench avec quelques itérations successives
Je mets également le lien vers ton tuto
Merci pour la correction du lien
Je sais même pas comment on fait un bench ::lol ::whistle
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 ?
Je pense que ce billet pourrait t’intéresser
http://www.fredcavazza.net/index.php?2004/11/18/457-xslt-le-tueur-de-lxhtml
Je voulais te demander ce que tu entendais par template. Parles tu tes moteurs de Template comme vTEmplate : http://vtemplate.sourceforge.net/
Bah, j’en suis arrivé au même point que Fred Cavazza alors, j’arrive à rendre mon XML « joli » avec XSL(T) et un poil de CSS en plus, ça c’est facile et ça rend bien dans Firefox, Internet Explorer mais pas dans Opera. Enfin bref, moi ce que je voudrais c’est avoir le résultat *.html du fichier transformé via XSLT, parceque là quand on affiche la source on as le doc *.xml (logique). Donc je voudrais faire la création du fichier *.html correspondant aux données/contenu du *.xml et à la structure du document *.xsl et là je calle.
Ce que j’entend par template, et bien on a QUE le contenu dans des balises logiques (genre, , , …) 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 (, - ,
, …) 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…
Au final tu veux préserver ton XML brut ou le fait qu’il soit parsé via un script PHP puis transformé en page XHTML soit justement ton objectif?
ça mérite un topic sur le forum alsa ça non?
Non, je veux pas préserver mon XML, je veux bien le parser via PHP (je pense) pour le transformer en xHTML, mais il faut prendre en compte les tansformations XSLT.
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
. Mais j’ai pas le temps de m’occuper de régler ce problème en détail tout de suite, mais si tu avais eu une idée je l’aurais notée et gardée bien au chaud.
Sinon t’as fait le bench ? pour comparer les 2 systèmes de pseudo frames ?
Ayé, j’ai trouvé le début, d’un prémice de quelque chose d’embryonaire !!!
http://www.phpindex.com/articles/articles_lire.php3?element=301
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]
yO,
je n’ai pas fait le bench – dans la semaine surement
Pour ce Blog, j’ai été amené a écrire un petit moteur de Template. On pourrait imagine une version avancée …
On en reparlera d’ici là et si tu avances sur le sujet n’hésites pas à me faire signe.
Merci pour ce tuto, je ne connaissais pas cette technique. Bien pratique finalement
Super technique… mais est-ce sûr à 100%???
Merci beaucoup pour cette technique !
(comme j’ai la sale habitude de faire) !
Niveau sécurité, c’est mieux que de mettre directement l’adresse dans le get
Bonjour,
Je voudrai savoir comment modifier le code pour que l’inclusion apparaisse sous chaque lien sorrespondant ?
Merci beaucoup.
Bonjour solo, peut-être te souviens-tu de moi?
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?
Technique pour feignant qui oublie de mettre à jour leur tableau de pages à inclure…j’aime ^^
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.
Il suffit d’écrire ainsi ton url
index.php?page=test&var1=truc&var2=machin
et tes variables sont simplement accessibles avec $_GET["var1"] et $_GET["var2"]
oui bon d’accord ::whistle
Je sors.
PS : merci beaucoup pour ta rapidité !
Bon, je donne un peu plus de précisions
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
E²xiT, il te faut gérer soit un fichier, un tableau ou je ne sais quoi qui te permette de faire l’association entre un include et un nom d’include.
Au besoin va poser ta question sur le forum http://dreamweaver.media-box.net avec le script que tu utilises
Bonjour,
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 ?
Bonjour pierito,
si tu dois gérer deux includes : un header et un footer il te suffit de faire un simple include des deux fichiers concernés en début et en fin de script. C’est forcément sécurisé puisque les fichiers appelés ne sont pas paramétrables.
Bon route dans l’apprentissage du PHP
C’est bon je me suis inspiré d’un code et je m’en suis fait un, il fonctionne très bien
Merci bien.
Merci pour le tutO
kommen on fai pour autoriser plusieure page ?
Bonjour Ueaki,
les fichiers se situant dans le repertoire include sont automatiquement « autorisés »
a ok Merci ::mrgreen
est ce que on doit laisser les page
in_array
glob
str_pad ? si oui il serve a quoi ?
Merci d’avance
Salut Toto,
Nan les fichiers servent d’exemples
ok merci:D
quel qu’un peut m’expliquer le tableau en détail parce que je comprend pas tout
et je dois metre le tableau sur toute les page que jai inclu ?
bonjour,
je voudré savoir comment autorisé
toute les page de mon serveur
Merci d’avance
@Marin et Ploup
je vous conseille de poster vos questions sur ce forum:
http://dream.media-box.net
J’y répondrais
bonjour,je voudré changer ce bou de code pour autorisé plusieur dossier
define(« PATH », « ./includes/ » ) ;
Sauron,
Il faudrait modifier le code entier pour prévoir la gestion des sous dossier. Je verrais si je peux fournir un script allant dans ce sens.
En attendant pour toute question :
http://dream.media-box.net