Comment inclure un fichier de plus de 2 répertoires de retour?
Comment inclure un fichier de plus de 2 répertoires de retour. Je sais que vous pouvez utiliser ../index.php
d'inclure un fichier qui est 2 répertoires en arrière, mais comment faites-vous pour les 3 répertoires de retour?
Est-il logique?
J'ai essayé .../index.php
mais il ne fonctionne pas.
J'ai un fichier dans /game/forum/files/index.php
et il utilise PHP include pour inclure un fichier. Qui est situé dans /includes/boot.inc.php
; /
étant le répertoire racine.
- c'est plus comme PHP, pas en HTML...
- chdir("../");
Vous devez vous connecter pour publier un commentaire.
..
sélectionne le répertoire parent de l'actuel. Bien sûr, cela peut être enchaîné:Ce serait deux répertoires.
define
serait utilisé ici, mais (1) qui n'était même pas à distance la question ici. Et (2) que vous souhaitez toujours utiliser un chemin relatif dans votredefine
, Sauf si vous avez réellement coder en dur l'ensemble de l'absolu chemin d'accès au serveur et je voudrais éviter de que, puisqu'elle n'a que des inconvénients. Ou (le troisième alternative), vous pouvez utiliser la manipulation de chaîne à extraire le répertoire parent de l' (élargi) chemin actuel, mais encore une fois ce n'est pas un aucun avantages à utiliser des chemins relatifs./../
peuvent travailler ou../
de travail, ou ne peuvent pas travailler sur trois ordinateurs différents avec la même configuration de l'environnement de../
et../../
(note: n slash!), fonctionne sur tous les systèmes d'exploitation modernes. utilisé pour fonctionne pas sur Windows et (long il ya) Macintosh mais il fonctionne désormais partout, et a pour au moins les dix dernières années. Si cela ne fonctionne pas quelque part, puis la raison en est que la structure du fichier est différent, et/ou que vous êtes dans un autre répertoire de travail. Mais c'est sans rapport avec le présent code./../
au lieu de../
sur son environnement./../
fait tout simplement pas de sens sur un système (c'est l'équivalent de/
, ou d'une erreur). Êtes-vous sûr que vous n'êtes pas coller quelque chose en face de lui?Pour inclure un fichier d'un répertoire à l'arrière, utilisez
'../file'
.Pour les deux répertoires à l'arrière, utilisez
'../../file'
.Et ainsi de suite.
Bien que, de façon réaliste, vous ne devriez pas effectuer comprend relatif au répertoire courant. Que faire si vous voulez déplacer ce fichier? Tous les liens se briser. Une façon de s'assurer que vous pouvez toujours le lien vers d'autres fichiers, tout en conservant ces liens si vous déplacez votre fichier est:
DOCUMENT_ROOT
est un serveur de la variable qui représente le répertoire de base de votre code se trouve à l'intérieur.Donc
../
vous obtient un répertoire de retour pas deux.De la chaîne d'
../
autant de fois que nécessaire pour aller jusqu'à 2 niveaux ou plus.est votre meilleur pari ici, et qu'elle permettra d'éviter la plupart du chemin d'accès relatif des bugs que vous pouvez rencontrer avec d'autres solutions.
En effet, il va forcer l'inclure à toujours être par rapport à la position du script courant où ce code est placé (dont la localisation est le plus probablement stable, puisque vous définir l'architecture de votre application). Ceci est différent de simplement faire
include '../../index.php'
qui comprendra relativement à l'exécution (aussi nommé "l'appel") script, puis relativement au répertoire de travail courant, qui pointe vers le script parent qui comprend votre script, au lieu de le résoudre à partir de votre script inclus du chemin.De la documentation PHP:
Et le plus ancien post que j'ai trouvé en citant cette astuce remonte à 2003, par Tapken.
Vous pouvez tester avec la configuration suivante:
Créer une mise en page comme ceci:
Dans
parent.php
, mettre:Dans
sub/included.php
, mettre:Résultat lors de l'accès à
parent.php
:Comme nous pouvons le voir, dans le premier cas, le chemin est résolu à partir du script d'appel
parent.php
, tout en utilisant ledirname(__FILE__).'/path'
truc, l'include est fait à partir du scriptincluded.php
où le code est placé dans.Attention, la suite de ne PAS l'équivalent pour l'astuce ci-dessus contrairement à ce qu'on peut lire ailleurs:
En effet, ajoutant
/
de fonctionner, mais il va résoudre tout commeinclude ../../index.php
partir du script d'appel (la différence est queinclude_path
ne sera pas examiné par la suite si elle échoue). À partir de PHP doc:..
milieu du chemin (relatif/absolu)...
est utilisé moyen de l'inclure. il doit toujours être la première partie d'inclure../
est un répertoire, Répétez l'opération pour les deux répertoires../../
ou même les trois:../../../
et ainsi de suite.Définir les constantes peuvent réduire les risques de confusion parce que vous allez percer en avant dans les répertoires versets en arrière
Vous pouvez définir certaines constantes comme suit:
Lors de l'utilisation de " BD "ou mon" répertoire de base", il ressemble à ceci:
define(); référence
Chaque instance de
../
est-à-dire/retour d'un répertoire.qui suit sont des moyens pour accéder à vos différents répertoires:-
Vous pouvez faire
../../directory/file.txt
- Cela va dans les deux répertoires de retour.../../../
- cela va de trois. etcMais TRÈS prudent à propos de permettre à un utilisateur de sélectionner un fichier. Vous ne voulez pas vraiment pour leur permettre d'obtenir un fichier appelé, par exemple,
ou autres zones sensibles du système de fichiers.
(Désolé, il a été un moment depuis que je suis sysadmin linux, et je pense c'est un fichier sensible, de ce que je me souviens)
si vous utilisez php7 vous pouvez utiliser dirname de la fonction avec le paramètre de niveau de 2, par exemple :
le second paramètre "2" indiquent le nombre de niveau
dirname referance
Je vous conseille d'utiliser
__DIR__
pour spécifier php actuel de fichier de répertoire. Vérifier ici pour la raison.Essayer
../../
. Vous pouvez les modifier en conséquence car elle vous mènera jusqu'à l'arrière de deux répertoires. D'abord aller à la racine puis d'accéder au répertoire requis.E. g. Vous êtes dans
root/inc/usr/ap
et il y a un autre répertoireroot/2nd/path
. Vous pouvez accéder à lapath
répertoire deap
comme ceci:../../2nd/path
d'abord aller à la racine de répertoire souhaité. Si ne fonctionne pas s'il vous plaît partager.si vous incluez le
/
au début de la comprendre, de l'inclure seront repris le chemin depuis la racine du site.si votre site est http://www.example.com/game/forum/files/index.php vous pouvez ajouter une inclusion /includes/boot.inc.php qui permettrait de résoudre à http://www.example.com/includes/boot.inc.php .
Vous devez être prudent avec les
..
traversée que certains serveurs web ont désactivé; il provoque également des problèmes lorsque vous voulez déplacer votre site vers une nouvelle machine/de l'hôte et la structure est un peu différente.y compris sur les répertoires peuvent être traitées par procuration fichier
.....|_proxy.php
J'ai vu vos réponses et j'ai utilisé le chemin d'inclusion avec la syntaxe
et un serveur http (Apache 2.4.3) a retourné une erreur interne 500.
Quand j'ai changé le chemin d'accès à
tout va bien.
Essayer Cette
cet exemple est un répertoire de retour
cet exemple est de deux répertoire de retour