2010-01-18 8 views
1

Pour une raison quelconque si je inlcude() un fichier plus profond dans la structure de fichier à l'endroit où le fichier appelant le include() est, il fonctionne fichier, ou si j'inclure un fichier au même niveau.PHP Inclure se comporter étrangement?

Si j'essaie d'aller include('../backFile.php') il me dit qu'il n'y avait pas de fichier?

Toute aide :(

Répondre

1

Vous devriez peut-être essayer basant sur le répertoire courant:

include(getcwd() . '../backFile.php'); 
1

Essayez ceci:

include('./../backFile.php'); 
3

Je ne suis pas tout à fait sûr de ce que vous situation exacte Il y a probablement une solution simple pour que cela inclue le travail.Ce correctif sera probablement fourni dans une autre réponse:

Au lieu de cela, je vais vous offrir un best-practice (Eh bien, peut-être pas « meilleur », mais une bonne pratique):

Dans le premier fichier que vous appelez, ou votre fichier de configuration, définir une constante qui est le chemin dans le premier répertoire de vos fichiers sont contenus dans

donc, si vous travaillez dans /home/user/domains/test.com/.

DEFINE('SITE_PATH', '/home/user/domains/test.com/'); 

Ensuite, chaque fois que vous incluez quelque chose, l'utiliser comme un lieu de départ

include(SITE_PATH . "lib/test.class.php"); 

Cela permettra de s'assurer que PHP utilise le chemin d'accès complet au fichier, et vous n'avez pas à vous soucier d'inclure le fichier relativement.

Ceci est très utile lorsque vous modifiez les emplacements de fichiers, car vous n'avez pas à modifier les inclusions lorsque vous déplacez le fichier, y compris tout.

3

En plus de ce que les autres ont dit que je realpath tout ... par exemple:

include(realpath(dirname(__FILE__).'/../myFile.php'));

0

include dépend de include_path directive du php qui est . par défaut (le répertoire où le script exécution en cours est). Utilisez ini_set ou set_include_path pour définir votre propre include_path.

0

Lorsque vous spécifiez un chemin (absolu ou relatif) dans le paramètre include, il ne comprend pas utiliser le système chemin, mais résout plutôt le chemin par rapport au fichier « principal », qui est habituellement un index.php de quelque sorte.

Par exemple, vous avez trois fichiers, /www/index.php:

<?php 
include('libs/init.php'); 

/www/test.php:

I was included!  

et /www/libs/init.php:

<?php 
include('../test.php'); 

L'appel include('../test.php') sera résolu en utilisant la index.php 's répertoire texte, qui est /www, donc au lieu de /www/test.php vous essayez actuellement d'inclure /test.php.

Pour être honnête, je ne sais pas pourquoi cela fonctionne de cette façon. Mon libs/init.php résout comme ceci:

define('DIR_ROOT', str_replace('\\', '/', dirname(dirname(__FILE__)))); 

Et puis PREPEND tous les chemins avec elle. L'appel str_replace consiste à gérer les chemins d'accès Windows plus facilement.

Questions connexes