web-dev-qa-db-fra.com

PHP require () erreur de chemin relatif

j'ai la structure de fichiers suivante:

 rootDIR 
 dir1 
 subdir1 
 file0.php 
 file1.php 
 dir2 
 file2.php 
 file3.php 
 file4.php 

file1.php requiert file3 et file4 de dir2 comme ceci:

require('../../dir2/file3.php')

file2.php a besoin file1.php comme ça :

require('../dir1/subdir1/file1.php')

MAIS alors exiger dans file1 ne parvient pas à ouvrir file3 et file4 (peut-être en raison de la relativité du chemin)

Cependant, quelle est la raison et que puis-je faire pour file2.php alors file1.php nécessite correctement file3 et file4

41
Boris D. Teoharov

Essayez d'ajouter dirname(__FILE__) avant le chemin, comme:

require(dirname(__FILE__).'/../../dir2/file3.php');

Il doit inclure le fichier à partir du répertoire racine

53
Baronth

Pour les chemins relatifs, vous pouvez utiliser __DIR__ Directement plutôt que dirname(__FILE__) (tant que vous êtes en utilisant PHP 5.3.0 et supérieur =):

require(__DIR__.'/../../dir2/file3.php');

N'oubliez pas d'ajouter la barre oblique supplémentaire au début du chemin entre guillemets.

Voir:

48
SharpC

Un bon conseil ici est de ne jamais utiliser des chemins relatifs "../../" dans vos applications Web. C'est difficile à lire et terrible pour l'entretien.

  1. Comme vous pouvez en témoigner. Cela rend extrêmement difficile de savoir ce que vous pointez.

  2. Si vous devez modifier le niveau de dossier de votre application, ou des parties de celle-ci. Il est complètement sujet aux erreurs et cassera probablement quelque chose d'horrible à déboguer.

Au lieu de cela, define quelques constantes dans votre fichier bootstrap pour votre ou vos chemins principaux), puis utilisez:

require(MY_DIR.'/dir2/file3.php');

Déplacer votre application à partir de là est aussi simple que de remplacer vos constantes MY_DIR dans un seul fichier.

5
hexalys

Vous pouvez toujours utiliser le $_SERVER['DOCUMENT_ROOT'] comme point de départ valide également, plutôt que de recourir à un chemin relatif. Juste une autre option.

require($_SERVER['DOCUMENT_ROOT'].'/wp-load.php');
0
Grant