Par Nicolas SUPRIN, jeudi 8 février 2007 à 12:30 | PHP | #83 | rss
Une partie importante d'un fichier de configuration, c'est la liste des répertoires de l'appli. Je m'y attarde donc quelques minutes avec vous.
Principe
Soit une arborescence d'appli web telle que celle ci : (exemple)
ihmcontiendra tout les éléments de mise en page (templates, css, medias...)libsles diverses classes de l'applipageles pages proprement dites.
Il nous faut connaitre les chemins de l'appli, pour, par exemple ajouter les chemins des libs dans l'include_path.
Problème
Il fut un temps où par reflex, et surtout par manque d'expérience, pour définir la constante de racine de l'appli, j'utilisais le $_SERVER'DOCUMENT_ROOT'.
Grave erreur ! Si mon appli devait être, pour une raison X ou Y, être déplacée dans un sous répertoire... plus rien ne fonctionnait.
En effet $_SERVER'DOCUMENT_ROOT', quelque soit ma position dans l'arborescence, est la racine du server web, soit par exemple /var/www/toto/www. Donc les chemins de mes libs étaient érronés... et patatra
Solution
Aujourd'hui, je lui préfere cette méthode : dirname(FILE) signifiant chemin du répertoire de ce fichier.
Quelque soit la position du globalConf (et donc de l'appli) dans l'arborescence, la racine sera correct, et ainsi que tout les chemins de l'appli.
<?php define('SYS_ROOT', dirname(__FILE__).DIRECTORY_SEPARATOR); // ihm define('SYS_IHM', SYS_ROOT.'ihm'.DIRECTORY_SEPARATOR); define('SYS_TPL', SYS_IHM.'tpl'.DIRECTORY_SEPARATOR); // etc... define('SYS_LIB', SYS_ROOT.'libs'.DIRECTORY_SEPARATOR); //etc... ?>





Ouais, tu as raison,c'est mieux...
Perso je limte la profondeur de l'arbo dans ihm à un seul niveau pour les catégories (flash et images sont donc à la racine de ihm) et j'en profite pour diviser ensuite le dossiers images en sous repertoires : interface / icons / bannieres / etc...
Et comment inclus-tu ton globalConf dans un fichier plus profond ds ton arbo (genre dans "pages") ?
Vu que normallement on faisait un :
require_once $_SERVER['DOCUMENT_ROOT'].'/globalConf.php';
??
parce que du coup ton truc sert plus à rien !
ton truc marche si tout passe par l'index avec un aiguillage façon MVC derrière, comme tu inclus ton globalConf une seule fois ... sinon t'es mort ...
Facile ! tu connais '..' ?
:P !
Aucun trackback.
Pour faire un trackback sur ce billet : http://blog.cactuscrew.com/tb.php?id=83&chk=jogaqi