La réponse acceptée de Pekka est incomplète et, dans un contexte général, trompeuse. Si le fichier est fourni comme chemin relatif, la construction de langage appelée include
le recherchera de la manière suivante.
Tout d'abord, il passera par les chemins de la variable d'environnement include_path
, qui peut être définie avec ini_set
. Si cela échoue, il cherchera dans le propre répertoire du script appelant dirname(__FILE__)
( __DIR__
avec php> = 5.3.) Si cela échoue également, alors seulement il cherchera dans le répertoire de travail! Il s'avère simplement que, par défaut, la variable d'environnement include_path
commence par .
, qui est le répertoire de travail actuel. C'est la seule raison pour laquelle il recherche d'abord dans le répertoire de travail actuel. Voir http://php.net/manual/en/function.include.php .
Les fichiers sont inclus en fonction du chemin d'accès au fichier donné ou, si aucun n'est indiqué, du chemin d'inclusion spécifié. Si le fichier n'est pas trouvé dans include_path, include va finalement archiver le propre répertoire du script appelant et le répertoire de travail actuel avant d'échouer.
Donc, la bonne réponse à la première partie de la question est qu'il importe où se trouve le script d'appel inclus. La réponse à la dernière partie de la question est que le répertoire de travail initial , dans un contexte de serveur web, est le répertoire du script appelé, le script qui inclut tous les autres tout en étant manipulé par PHP. Dans un contexte de ligne de commande, le répertoire de travail initial est ce qu'il est lorsque php est appelé à l'invite, pas nécessairement le répertoire où se trouve le script appelé. Le répertoire de travail actuel , cependant, peut être modifié au moment de l'exécution avec la fonction PHP chdir
. Voir http://php.net/manual/en/function.chdir.php .
Ce paragraphe est ajouté pour commenter d'autres réponses. Certains ont mentionné que s'appuyer sur include_path
est moins robuste et qu'il est donc préférable d'utiliser des chemins complets tels que./path
ou __DIR__ . /path
. Certains sont allés jusqu'à dire que se fier au répertoire de travail .
lui-même n'est pas sûr, car il peut être modifié. Cependant, parfois, vous devez vous fier aux valeurs d'environnement. Par exemple, vous pouvez vouloir définir include_path
vide, de sorte que le répertoire du script appelant soit le premier endroit où il effectuera la recherche, même avant le répertoire de travail actuel. Le code peut être déjà écrit et mis à jour régulièrement à partir de sources externes et vous ne souhaitez pas réinsérer le préfixe __DIR__
chaque fois que le code est mis à jour.