Comment inclure un fichier contenant plus de 2 répertoires. Je sais que vous pouvez utiliser ../index.php
pour inclure un fichier qui est 2 répertoires en arrière, mais comment faites-vous pour 3 répertoires en arrière? Est-ce que ça a du sens? J'ai essayé .../index.php
mais ça ne marche pas.
J'ai un fichier /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.
php
include
filesystems
hakre
la source
la source
Réponses:
..
sélectionne le répertoire parent dans le répertoire courant. Bien sûr, cela peut être enchaîné:Ce serait deux répertoires en place.
la source
define
serait utilisé ici mais (1) ce n'était même pas de loin la question ici. Et (2) vous utiliseriez toujours un chemin relatif dans votredefine
, à moins que vous ne codiez en dur le chemin du serveur absolu et je m'en abstiendrais car cela n'a que des inconvénients. Ou (la troisième alternative) vous pouvez utiliser la manipulation de chaînes pour extraire le répertoire parent du chemin courant (développé) mais encore une fois cela n'a aucun avantage à utiliser des chemins relatifs./../
peut fonctionner ou../
peut fonctionner, ou aucun des deux ne peut fonctionner sur trois ordinateurs différents avec exactement la même configuration d'environnement../
et../../
(note: pas de barre oblique!), Fonctionne sur tous les systèmes d'exploitation modernes. Il permet de ne pas fonctionner sur Windows et ( à long Macintosh il y a) , mais il fonctionne maintenant partout, et a pour au moins les dix dernières années. Si cela ne fonctionne pas quelque part, la raison en est que la structure des fichiers est différente et / ou que vous vous trouvez dans un répertoire de travail différent. Mais ce n'est pas lié à ce code./../
au lieu de../
sur son environnement./../
n'a tout simplement aucun sens sur aucun système (c'est équivalent à/
, ou une erreur). Êtes-vous sûr de ne pas coller quelque chose devant lui?Pour inclure un fichier dans un répertoire, utilisez
'../file'
. Pour deux répertoires en arrière, utilisez'../../file'
. Etc.Bien que, de manière réaliste, vous ne devriez pas effectuer d'inclusions par rapport au répertoire actuel. Et si vous vouliez déplacer ce fichier? Tous les liens se rompraient. Un moyen de vous assurer que vous pouvez toujours créer des liens vers d'autres fichiers, tout en conservant ces liens si vous déplacez votre fichier, est:
DOCUMENT_ROOT
est une variable serveur qui représente le répertoire de base dans lequel se trouve votre code.la source
Donc,
../
vous récupère un répertoire et non deux .Enchaînez
../
autant de fois que nécessaire pour monter de 2 niveaux ou plus.la source
est votre meilleur pari ici, et cela évitera la plupart des bogues de chemin relatifs que vous pouvez rencontrer avec d'autres solutions.
En effet, cela forcera l'inclusion à toujours être relative à la position du script courant où ce code est placé (quel emplacement est probablement stable, puisque vous définissez l'architecture de votre application). Ceci est différent de simplement faire
include '../../index.php'
qui inclura relativement au script en cours d'exécution (également appelé "appel") et ensuite relativement au répertoire de travail actuel , qui pointera vers le script parent qui inclut votre script, au lieu de résoudre à partir du chemin de votre script inclus .Depuis la documentation PHP:
Et le message le plus ancien que j'ai trouvé citant cette astuce remonte à 2003, par Tapken .
Vous pouvez tester avec la configuration suivante:
Créez une mise en page comme celle-ci:
Dans
parent.php
, mettez:Dans
sub/included.php
, mettez: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 appelant
parent.php
, tandis qu'en utilisant l'dirname(__FILE__).'/path'
astuce, l'inclusion est effectuée à partir du script dansincluded.php
lequel le code est placé.Attention, ce qui suit PAS équivalent à l'astuce ci-dessus contrairement à ce que l'on peut lire ailleurs:
En effet, le préfixe
/
fonctionnera, mais il se résoudra comme àinclude ../../index.php
partir du script appelant (la différence est queinclude_path
cela ne sera pas examiné par la suite en cas d'échec). Depuis la documentation PHP :la source
..
milieu du chemin (relatif / absolu)...
est utilisé au milieu de l'inclusion. cela devrait toujours être la première partie de include../
est un répertoire, Répétez pour deux répertoires../../
ou même trois:../../../
et ainsi de suite.La définition de constantes peut réduire la confusion car vous explorerez les répertoires vers l'avant vers l'arrière.
Vous pouvez définir des constantes comme ceci:
Lorsque vous utilisez 'BD' ou mon 'répertoire de base', cela ressemble à ceci:
définir(); référence
la source
la source
Chaque instance de
../
signifie remonter / reculer d'un répertoire.la source
Voici les moyens d'accéder à vos différents répertoires: -
la source
Vous pouvez le faire
../../directory/file.txt
- Cela ramène deux répertoires.../../../
- cela va trois. etcla source
la source
Mais faites très attention à ne pas laisser un utilisateur sélectionner le fichier. Vous ne voulez pas vraiment leur permettre d'obtenir un fichier appelé, par exemple,
ou d'autres fichiers système sensibles.
(Désolé, cela fait un moment que je n'étais pas administrateur système Linux, et je pense que c'est un fichier sensible, d'après ce dont je me souviens)
la source
la source
Je recommande d'utiliser
__DIR__
pour spécifier le répertoire actuel du fichier php . Vérifiez ici la raison.la source
si vous utilisez php7, vous pouvez utiliser la fonction dirname avec le paramètre level de 2, par exemple:
le deuxième paramètre "2" indique combien de niveau supérieur
référence de dirname
la source
y compris sur les répertoires peuvent être traités par un fichier proxy
..... | _proxy.php
la source
Essayez
../../
. Vous pouvez le modifier en conséquence car il vous fera remonter de deux répertoires. Accédez d'abord au répertoire racine, puis accédez au répertoire requis.Par exemple, vous êtes
root/inc/usr/ap
et il y a un autre répertoireroot/2nd/path
. Vous pouvez accéder aupath
répertoireap
comme ceci:../../2nd/path
allez d'abord à la racine que dans le répertoire souhaité. Si cela ne fonctionne pas, veuillez partager.la source
si vous incluez le
/
au début de l'inclusion, l'inclusion sera considérée comme 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 se résoudra en http://www.example.com /includes/boot.inc.php .
Vous devez être prudent avec la
..
traversée car certains serveurs Web l'ont désactivée; cela pose également des problèmes lorsque vous souhaitez déplacer votre site vers une nouvelle machine / hôte et que la structure est un peu différente.la source
Essaye ça
cet exemple est un répertoire en arrière
cet exemple est deux répertoires en arrière
la source
J'ai vu vos réponses et j'ai utilisé un chemin d'inclusion avec la syntaxe
et le serveur http (Apache 2.4.3) a renvoyé l'erreur interne 500.
Quand j'ai changé le chemin pour
tout va bien.
la source