2010-07-26 8 views
22

Ainsi, l'examen de cette structure de répertoireappel incluent à partir d'un fichier inclus

  • /include_one.php
  • /include_two.php
  • /directory/main_file.php

Supposons que je sois /directory/main_file.php et j'appelle include('../include_one.php'); à l'intérieur de include_one.php, pour inclure include_two.php. Dois-je appeler le include('include_two.php); ou le include('../include_two.php');? Donc, ma question est la suivante: Lorsque vous incluez un fichier, le 'chemin d'inclusion relatif' est-il décalé vers le fichier inclus, ou reste-t-il dans le fichier principal inclus?

Je suis conscient que la meilleure alternative serait d'avoir un config.php qui contient le root_path, mais ce n'est pas possible à ce stade.


mise à jour:
Donc, je ne suis pas sûr de qui est juste, comme ici est mon test

structure de répertoire

/include.php
/start/start.php
/folder1/includeone.php
/folder1/folder2/includetwo.php

et voici le contenu de chaque fichier

start.php

<?php 
    echo 'including ../include.php<br />'; 
    include('../include.php'); 
?> 

include.php

<?php 
    echo 'including folder1/includeone.php<br />'; 
    include('folder1/includeone.php'); 
?> 

includeone.php

<?php 
    echo 'including folder2/includetwo.php<br />'; 
    include('folder2/includetwo.php'); 
?> 

includetwo.php

<?php 
    echo 'done<br />'; 
?> 

et la sortie est

y compris ../include.php
y compris folder1/includeone.php
y compris folder2/includetwo.php

fait
+0

toujours pas de réponse à ma mise à jour ... – Hailwood

+0

Salut. Je crois que cela dépend du système qui exécute le code. Je travaille actuellement dans un projet de 4 ans, qui est exécuté à travers différents systèmes d'exploitation et paramètres. D'une manière ou d'une autre, chaque fois que je clone le code, je dois tout configurer à nouveau, alors qu'un de mes collègues peut tout simplement le lancer à chaque fois qu'il le clone sur sa machine. Je suis actuellement à la recherche d'un moyen pour que PHP change le "chemin d'inclusion relatif" chaque fois qu'il change de fichier en fichier. –

Répondre

40

Le "chemin d'inclusion relative" n'est pas décalé vers le file ... Ce qui signifie que l'utilisation de chemins relatifs se termine généralement mal.

Une meilleure solution, que j'utilise presque tout le temps, est de toujours travailler avec des chemins absolus - et vous pouvez mélanger des parents et des chemins absolus en utilisant __DIR__, pour obtenir le répertoire qui contient le fichier où il est écrit.


Par exemple, dans include_one.php, vous pouvez utiliser:

require_once __DIR__ . '/include_two.php'; 

Pour inclure le fichier include_two.php qui se trouve dans le même répertoire que include_one.php.


Et, dans main_file.php, vous pouvez utiliser:

require_once __DIR__ . '/../include_one.php'; 

Pour inclure le fichier include_one.php qui est un répertoire vers le haut.


Avec cela, votre inclusion fonctionnera, quel que soit le fichier dans lequel ils sont appelés.

+3

Pour économiser de l'espace, '__DIR__' est équivalent à dirname (__ FILE __)'. – thomas88wp

0

J'utilise ce code:

if(!isset($TO_HOME_DIR)) $TO_HOME_DIR="../"; 

Et j'inclure un fichier:

include_once($TO_HOME_DIR."common/include_one.php"); 

Avec if(!isset($TO_HOME_DIR)), il est pas important combien vous inclure un fichier dans le fichier inclus dans le fichier inclus dans includ ..... Seule la déclaration $ TO_HOME_DIR du premier fichier et du fichier principal est utilisée. Le deuxième avantage de cette approche est que, si vous changez le répertoire du fichier, vous avez seulement besoin de changer une ligne de code; Déclaration $ TO_HOME_DIR. :)

Questions connexes