[PHP] Structure d'un site

:stuck_out_tongue:

Je suis en train de réfléchir pour la mise au point d’un site dynamique assez complexe et j’hésite entre plusieurs façons de structurer l’arborescence et l’accès aux différents modules, pour que ce soit clair, sûr et fonctionnel et organisé (pas trop le bordel dans les fichiers…). Je pense déjà faire un sous dossier par module (par exemple /livredor, /inscription…) et des dossiers communs (/include, /images, /scripts…).

Arbo d’exemple pour un module livre d’or :
/include : contient header.inc.php, footer.inc.php et des fonctions (connexion à la base, traitement de données…)
/livredor : contient les fichiers relatifs au livre d’or
index.php : accueil

Voici les différentes solutions que j’envisage, d’un point de vue un peu simplifié :

Solution 1 :

Un fichier index.php à la racine du site qui inclus un header, un footer et au milieu le corps de la page. La navigation se fait en passant le nom de la page par méthode GET (dans l’URL). index.php récupère cette variable et inclus la page correspondante, si aucune page n’est spécifiée, index inclus la page d’accueil. La variable est cependant testée ou doit faire partie d’une liste (dans un select case) afin de ne pas inclure de page externe au site.

Exemple : www.monsite.com/index.php?p=livredor, la page finale sera composée de /include/header.inc.php, /livredor/livredor.php et /include/footer.inc.php.

Avec variable GET : www.monsite.com/index.php?p=livredor&action=ajouter

Solution 2 :

Chaque sous dossier contient une page index.php qui inclus header, footer et le corps de la page.

Exemple : www.monsite.com/livredor, la page finale sera composée de …/include/header.inc.php …/include/footer.inc.php et livredor.php (qui se trouve dans le dossier /livredor). On n’a pas besoin de préciser de fichier, l’index.php de chaque module est chargé automatiquement.

Avec variable GET : www.monsite.com/livredor?action=ajouter

Problème : ça va être le bordel au niveau des liens relatifs, car une fois dans un module, il faut ajouter …/ pour charger un fichier de ce même module ou spécifier le fichier (ex : une fois dans le module livredor, c’est soit href="…/livredor?action=truc" soit href=“index.php?action=truc”).
Mais chaque module pourrait être indépendant (si on utilise index.php pour les liens en relatif).

Solution 3 :

Chaque sous dossier contient les pages relatives au module. A la racine du site se trouve une page par module : livredor.php, inscription.php… Chacune de ces pages inclus header, footer et le corps du module.

Exemple : www.monsite.com/livredor.php, la page finale sera composée de /include/header.inc.php /include/footer.inc.php et /livredor/livredor.php

Avec variable GET : www.monsite.com/livredor.php?action=ajouter

Problème : bordel à la racine du site

Solution 4 :

Mixe entre 2 et 3 :

Exemple : www.monsite.com/livredor/livredor.php, mais ça fait des URL à rallonge…

Autres précisions : je ne veux pas utiliser de frame et il y aura une interface admin qui pourra naviguer sur le site avec des fonctions supplémentaires (genre supprimer un message sur le livre d’or).
J’aimerais des URL assez courtes, une bonne organisation des modules, la possibilité de les utiliser ailleurs, une certaine sécurité, et assez rapide de développement. Pour le moment mon choix se porte plutôt sur la solution 2.

Vos avis, commentaires, suggestions sont les bienvenus !

Merci !

Perso je te conseille la première solution, ensuite tu la couple avec de l’url rewriting et tu auras quelque chose de vraiement souple.
Par exemple :
www.monsite.com/livredor_ajouter.html appelera :
www.monsite.com/index.php?p=livredor&action=ajouter
Jette un oeil ici : http://www.webrankinfo.com/analyses/autres/url-rewriting-debutants.php

Sinon concernant ton arborescence, rajoute un répertoire modules dans lequel tu mets tous tes modules, sinon quand tu en auras beaucoup ce sera le foutoir.

Juste un petit conseil, pour le p=livredor.

Perso, moi je fais page=5 (par exemple) et dans mon script PHP, je fais if ($page==5) { include “patati”; }
C’est un peu plus prise de tête en apparence, quoique je m’en sors très bien, suffit de bien commenter le code, mais ça fait des URL plus courts et ça évite les problèmes d’injection, donc, c’est un peu plus “sécure”.
Enfin, c’est pas parce que je le fais que c’est mieux, je donnais mon avis, c’est tout.

J’ai commencé à faire un bout de site (le livre d’or en l’occurence :D) que je vais d’abord tester sur mon site perso (pour essayer le recyclage des modules) puis intégrer dans la structure du gros site, en déplaçant les fichiers d’include (fonctions, connexion à la BDD, config, header/footer) dans un dossier include. Pour l’instant ce que j’ai fait me semble assez modulaire et adaptable.

Je vais voir du côté de l’URL rewriting, c’est vrai que c’est la classe :sol:

WOTW > pour l’inclusion, je pensais aussi faire un truc genre if ($p==“livredor”) include (“livredor/livredor.php”), ne pas inclure directement la page passée en paramètre quoi, pour des questions de sécurité. Mais de toutes façons je pense pas utiliser cette méthode.

Ah au fait, question : Free supporte l’URL rewriting ? Je vais héberger mon site chez eux, c’est un site communautaire que je fais gratos, alors faudrait pas que ça me coûte quelque chose non plus !

Tiens d’ailleurs ça me fait penser que si j’utilise la seconde solution, ça me fait un paramètre de moins à gérer dans l’URL (le nom de la page).

Solution 1 : index.php?page=livredor&action=supprimer&id=5
Solution 2 : livredor/?action=supprimer&id=5

Shuret -> Free n’accepte pas l’url rewriting

Edit :
J’ai trouvé :
http://lionel.suz.free.fr/index.php?id=about&sub=blog&entry=1076844339
mais l’auteur se trompe, je suis passé par google pour trouver directement cette url :slight_smile: