Je vais avoir de la difficulté à comprendre le jeu de règles concernant le PHP par rapport chemins à inclure. Si je lance le fichier A.PHP - et fichier A.PHP inclut le fichier B.PHP qui inclut le fichier C.PHP si le chemin d'accès relatif à C.PHP dans le cas de l'emplacement de B.PHP ou à l'emplacement de A.PHP? C'est, importe-t-il qui fichier include est appelé à partir, ou seulement ce que le répertoire de travail actuel est - et qu'est ce qui détermine le répertoire de travail actuel?
Réponses
Trop de publicités?Il est relatif au script principal, dans ce cas A.php. Rappelez-vous que include()
seulement insère le code dans le script en cours d'exécution.
C'est, n'importe quel fichier include est appelé à partir de
Pas de.
Si vous voulez faire ce qu'il importe, et de faire un include par rapport à B.php, utiliser l' __FILE__
constant (ou __DIR__
depuis PHP 5.2 IIRC) qui pointe toujours à la traduction littérale du fichier courant que la ligne si le code est situé dans.
include(dirname(__FILE__)."/C.PHP");
@Pekka m'a mis là, mais juste envie de partager ce que j'ai appris:
getcwd()
renvoie le répertoire où le fichier que vous avez lancé l'exécution réside.
dirname(__FILE__)
renvoie le répertoire du fichier contenant le code en cours d'exécution.
À l'aide de ces deux fonctions, vous pouvez toujours construire un chemin d'inclusion par rapport à ce dont vous avez besoin.
par exemple, si b.php et c.php partager un répertoire, b.php peut inclure c.php comme:
include(dirname(__FILE__).'/c.php');
n'importe où b.php a été appelé à partir.
En fait, c'est la meilleure façon d'établir des chemins relatifs, comme le code supplémentaire libère PHP d'avoir à parcourir l'include_path dans la tentative de localiser le fichier cible.
Sources:
Différence Entre getcwd() et dirname(__FILE__) ? Qui dois-je utiliser?
-
Si le chemin ne commence pas par './' ou '../', comme
inclure "C.php'; // priorité: include_path (qui comprennent les '.' au premier abord), puis le chemin du courant .fichier php (B.php), puis '.'
-
Si le chemin commence par './' ou '../', comme
include './C.php'; // par rapport à '.'
include '../C.php'; // aussi par rapport à '.'
Le". " ou " .. " ci-dessus est par rapport à getcwd(), qui par défaut sur le chemin de l'entrée .fichier php (A.php) (changement de pouvoir par chdir())
Testé sur PHP 5.4.3 (Build Date : 8 Mai 2012 à 00:47:34 )
Réponse courte: c'est par rapport à la dont le script.
TFM explique correctement:
Si le fichier n'est pas trouvé dans l'include_path inclure va vérifier dans le script d'appel du répertoire et le répertoire de travail courant
Donc, si /app/main.php dit - include("./inc.php")
qui vous permettra de trouver /app/inc.php.
L' ./ n'est pas strictement nécessaire, mais supprime la dépendance de l'include_path.
Je ne voudrais pas compter sur la recherche d'inclure les fichiers dans le répertoire de travail actuel dans le cas où quelqu'un change avec chdir()
.