Vous pouvez définir une constante avec le chemin d'accès au répertoire racine de votre projet, puis la placer au début du chemin.
J'ai une structure de répertoire comme celle-ci :
script.php
inc/include1.php
inc/include2.phpobjets/objet1.php
objets/objet2.phpsavon/savon.php
Maintenant, j'utilise ces objets à la fois dans script.php
et /soap/soap.php
, je pourrais les déplacer, mais je veux une structure de répertoire comme celle-là pour une raison spécifique. Lors de l'exécution de script.php
, le chemin d'inclusion est inc/include.php
et lors de l'exécution de /soap/soap.php
, c'est ../inc
, les chemins absolus fonctionnent, 7
Mais c'est une solution laide si jamais je veux déplacer le répertoire vers un autre emplacement.
Y a-t-il donc un moyen d'utiliser des chemins relatifs, ou un moyen de générer par programme le '/mnt/webdev/[project name]/'
?
Vous pouvez définir une constante avec le chemin d'accès au répertoire racine de votre projet, puis la placer au début du chemin.
@Flubba, cela me permet-il d'avoir des dossiers dans mon répertoire d'inclusion ? flat include répertoires me donne des cauchemars. car tout le répertoire des objets doit être dans le répertoire inc.
Oh oui, absolument. Ainsi, par exemple, nous utilisons une seule couche de sous-dossiers, généralement :
require_once('library/string.class.php')
Vous devez faire attention à ne pas trop vous fier au chemin d'inclusion dans les sites à très fort trafic, car php doit parcourir le répertoire actuel, puis tous les répertoires du chemin d'inclusion afin de voir si votre fichier est là et cela peut ralentir les choses si vous vous faites marteler.
Ainsi, par exemple, si vous faites du MVC, vous placeriez le chemin d'accès à votre répertoire d'application dans le chemin d'inclusion, puis spécifiez la référence aux éléments du formulaire
'model/user.class'
'controllers/front.php'
ou quoi que ce soit.
Mais d'une manière générale, cela vous permet simplement de travailler avec des chemins très courts dans votre PHP qui fonctionneront de n'importe où et c'est beaucoup plus facile à lire que tout ce malarkey racine du document realpath.
L'avantage de ces alternatives basées sur des scripts que d'autres ont suggérées est qu'elles fonctionnent n'importe où, même sur des boîtes partagées ; définir le chemin d'inclusion nécessite un peu plus de réflexion et d'efforts, mais comme je l'ai mentionné, vous pouvez commencer à utiliser __autoload, ce qui est tout simplement le plus cool.
Une autre option, liée à celle de Kevin, est d'utiliser __FILE__
, mais à la place de remplacer le nom du fichier php depuis celui-ci :
<?php
$docRoot = str_replace($_SERVER['SCRIPT_NAME'], '', __FILE__);
require_once($docRoot . '/lib/include.php');
?>
Je l'utilise depuis un moment. Le seul problème est que parfois vous n'avez pas $_SERVER['SCRIPT_NAME']
, mais parfois il y a une autre variable similaire.