Maison >développement back-end >tutoriel php >PHP : exiger et inclure les problèmes de chemin
FILE est une variable prétraitée qui est traitée avant l'exécution et qui a été remplacée avant que le fichier ne soit inclus.
Le contenu du fichier requis par include est traité au moment de l'exécution, et son code est exécuté dans l'espace du include file, un chemin relatif, par rapport au fichier inclus .
1 Chemin absolu, chemin relatif et chemin indéterminé
Chemin relatif
Le chemin relatif fait référence au chemin commençant par ., tel que
./a / a.php (par rapport au répertoire courant)
../common.inc.php (par rapport au répertoire de niveau supérieur),
chemin absolu
Le le chemin absolu commence par / ou Windows C:/ similaire au chemin commençant par la lettre de lecteur, le chemin complet peut déterminer de manière unique l'adresse finale du fichier sans aucun chemin de référence. Par exemple
/apache/wwwroot/site/a/a.php
c:/wwwroot/site/a/a.php
Chemin indéterminé
Tout chemin qui ne commence pas par . ou /, ni par la lettre du lecteur Windows :/, tel que
a/a.php
common.inc.php,
Au début, je pensais qu'il s'agissait aussi d'un chemin relatif, mais dans le mécanisme include/require de PHP, ce type de chemin est géré complètement différemment des chemins relatifs commençant par . require './a.php' et require 'a.php' sont différents !
Ce qui suit analyse les méthodes de traitement de ces trois types de chemins d'inclusion : Tout d'abord, rappelons une conclusion : si le chemin d'inclusion est un chemin relatif ou un chemin absolu, il n'ira pas vers include_path (la variable d'environnement include_path défini dans php.ini, ou utilisez set_include_path(...) paramètre) pour trouver le fichier dans le programme.
Description de l'environnement de test
Remarque : la discussion et la conclusion suivantes sont basées sur cet environnement : Supposons que A=http://www.xxx.com/app/test/a.php, soulignez encore une fois La discussion suivante concerne le cas d’un accès direct à A.
2. Chemin relatif :
Le chemin relatif nécessite un répertoire de référence pour déterminer le chemin final du fichier dans l'analyse d'inclusion, quel que soit le nombre de niveaux d'imbrication inclus, ce répertoire de référence est. l'exécution du programme Le répertoire où se trouve le fichier d'entrée .
Exemple 1
A définit require './b/b.php'; // puis B=[SITE]/app/test/b/b.php
B Définition require './c.php'; // Alors C=[SITE]/app/test/c.php n'est pas [SITE]/app/test/b/c.php
Exemple 2
A définit require './b/b.php'; // Puis B=[SITE]/app/test/b/b.php
B définit require '.. /c. php'; // Alors C=[SITE]/app/c.php n'est pas [SITE]/app/test/c.php
Exemple 3
Défini dans A require '../b.php'; //Puis B=[SITE]/app/b.php
Défini dans B require '../c.php'; //Puis C= [SITE] ]/app/c.php n'est pas [SITE]/c.php
Exemple 4 :
A définit require '../b.php' / / Alors B=[SITE]/app/b.php
Require './c/c.php' est défini dans B // Alors C=[SITE]/app/test/c/c.php Non [SITE]/app/c/c.php
Exemple 5
A définit require '../inc/b.php'; [SITE]/app/inc/b.php
B définit require './c/c.php'; // Alors C toujours =[SITE]/app/test/c/c.php Non [SITE] /app/inc/c/c.php
Exemple 6
A définit require '../inc/b.php'; // Alors B=[ SITE]/app/inc/b.php
B nécessite require './c.php'; // Alors C=[SITE]/app/test/c.php n'est pas [SITE]/ app/inc/ c.php
3. Chemin absolu
Le chemin absolu est relativement simple et moins susceptible de provoquer des confusions et des erreurs require|inclue correspond au fichier sur le disque. .
require '/wwwroot/xxx.com/app/test/b.php'; // Sous Linux
require 'c:/wwwroot/xxx.com/app/test/b.php' ; // Sous Windows,
dirname(FILE) est également calculé comme un répertoire sous la forme d'un chemin absolu, mais veuillez noter que FILE est une constante magique, qui est égal au chemin absolu du fichier PHP où cette instruction est écrite. Par conséquent, dirname(FILE) pointe toujours vers le chemin absolu du fichier PHP où cette instruction est écrite. Cela n'a rien à voir avec le fait que ce fichier soit inclus et. utilisé par d'autres fichiers.
Exemple 1
A définit require '../b.php'; FILE).'/c.php'; // Alors B=[SITE]/app/c.php
Define require '../inc/b.php'; in A php'; // Alors B=[SITE]/app/inc/c.php est toujours dans le même répertoire que B
B if require dirname(FILE). '/../c.php'; // Référencez toujours le fichier c.php dans le répertoire parent du répertoire où se trouve le fichier B. found;
B if require dirname(FILE).'/c/c.php'; // Alors faites toujours référence au fichier c.php dans le sous-répertoire c du répertoire où se trouve le fichier B
require($dir . '../c.php');
Modifier l'élément de configuration (facultatif) allow_url_include = On
function import($path) { $old_dir = getcwd(); // 保存原“参照目录” chdir(dirname(FILE)); // 将“参照目录”更改为当前脚本的绝对路径 require_once($path); chdir($old_dir); // 改回原“参照目录” }De cette façon, vous pouvez utiliser la fonction import() pour exiger le fichier. Peu importe le nombre de niveaux de "répertoires de référence" qu'il contient, il s'agit du fichier actuel
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!