Mon répertoire de site est le suivant :
************************************ ** ****************************
wwwroot //Le chemin absolu vers le répertoire racine du site Web est : F : /wwwroot
-- dossier_a // Dossier A
file_a_a.php file_a_b.php file_a_c.php
-- dossier_b // Dossier B
file_b_a.php file_b_b.php file_b_c.php
-- index.php
** *********************************************** **** *********
La hiérarchie des répertoires est déjà très claire :
wwwroot est le répertoire racine, et il y a le fichier index.php et deux dossiers dossier_a et dossier_b en dessous
Ces deux dossiers contiennent chacun 3 fichiers php
Regardez d'abord le contenu du fichier index.php :
<?php require_once("folder_a/file_a_a.php"); echo "文件folder_a_a.php被包含成功"; ?>
Regardez ensuite le contenu du fichier dossier_a/folder_a_a.php :
<?php require_once("../folder_b/file_b_a.php"); $x = new X(); $x.printInfo(); ?>
Enfin, jetons un œil au contenu du fichier dossier_b/folder_b_a.php :
<?php class X{ function printInfo(){ echo 'success; } } ?>
ok si je lance floder_a /file_a_a.php directement maintenant
puis il affichera : success
Si je lance index.php
sous wwwroot, une erreur sera signalée car le include le fichier :file_b_a.php
< est introuvable 🎜>Mais si j'ajoutedirname(FILE).'/'
à tous require_once(), alors non peu importe que j'exécute file_a_a.php ou index.php, la sortie sera normale*************************** ************************* **********Problème :Le la première fois que j'ai utilisé un chemin relatif, donc une erreur s'est produite lorsque je l'ai inclus à plusieurs reprises Et moi la deuxième fois j'ai utilisé un chemin absolu, donc il n'y a pas eu d'erreur Mais j'étais quand même un peu confus : <🎜. >
J'ai d'abord analysé les raisons suivantes de l'erreur lors de l'utilisation de chemins relatifs :
J'ai exécuté index.php, il peut trouver le répertoire dossier_a et file_a_a.php dans ce répertoire, il copie donc le contenu de folder_a/file_a_a.php à la première ligne de index.php (la ligne contenant l'instruction), puis continue à s'exécuter (c'est-à-dire à exécuter le contenu inclus), donc à ce stade, cela équivaut à exécuter require_once('.. /folder_b/file_b_a.php') in file_a_a.php in index.php ; Il le trouve en fonction de l'emplacement actuel de index.php. Bien sûr, ce chemin de fichier (file_b_a.php) est introuvable, donc cela se passe mal. 🎜>
Mais n'est-ce pas pareil lorsque j'utilise le chemin absolu ? Mais pourquoi ça ne se passe pas mal ? Peut-être que cette phrase est un peu confuse, alors laissez-moi vous expliquer en détail (selon l'ordre de passage de le programme). Le programme exécute d'abord index.php (notez que j'ai ajouté le nom de répertoire (FILE) à ce moment-là, donc le chemin actuel est absolu),index.php exécute d'abord le première ligne de code : require_once(dirname(FILE).'/'.'folder_a/file_a_a.php');dirname(FILE) est f :/wwwroot/ Le chemin contenu dans ce code est donc : f:/wwwroot/folder_a/file_a_a.phpCe chemin est correct, donc il n'y a pas de problème, n'est-ce pasok La première étape est terminée correctement
Ensuite, il copie le code de file_a_a.php à cet endroit dans index.php :Ensuite, il continue à s'exécuter : c'est Exécutez tous les codes de file_a_a.php dans index.php, alors prenons un aperçu des codes qu'il exécute ?
Oui, c'est tout. Il est à noter que ces codes ont été copiés dans php, c'est-à-dire le contenu de index.php maintenant en fait. devient :
<?php require_once(dirname(FILE).'/'."../folder_b/file_b_a.php"); $x = new X(); $x.printInfo(); ?>
Ensuite analysez toujours le code ci-dessus selon l'ordre d'exécution du programme :
<?php require_once(dirname(FILE).'/'."../folder_b/file_b_a.php"); $x = new X(); $x.printInfo(); echo "文件folder_a_a.php被包含成功"; ?>
référencé
Ce que vous comprenez mal, c'est que FILE pointe toujours vers le fichier courant, qu'il s'agisse du fichier exécutable principal ou d'un fichier inclusC'est-à-dire : Si vous utilisez un chemin relatif ../folder_b/file_b_a.php, il sera d'abord copié puis pointé vers l'adresse. Si vous utilisez FILE, il sera pointé d'abord puis ensuite. inclus. Est-ce le cas ?Si vous utilisez un répertoire virtuel, alors ce répertoire sera basé sur le fichier que vous exécutez actuellement c'est-à-direfolder_a/folder_a_a.php文件的内容这样写:
<?php require_once("folder_b/file_b_a.php"); $x = new X(); $x.printInfo(); ?>
你看下会不会错
在跟目录里建个文件,把要引用的文件全部按绝对路经引进来;其他目录引这个文件就好了.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!