Quand j'ai regardé le code source d'un framework PHP dans le passé, il était étrange que lorsque le fichier était inclus, dirname(FILE) était utilisé pour reconstituer le chemin du fichier. Non, je connaissais les avantages de cela, et plus tard j'ai finalement découvert la raison.
Regardons un exemple simple :
Il y a trois fichiers php a, b et c. a.php se trouve dans le répertoire racine du site Web, b.php est dans le dossier b - b/b.php et c.php est dans le dossier c - c/c.php. Une certaine confusion ? C'est clair sur l'image :
a.php et b.php contiennent tous deux c.php, et enfin c.php contient un fichier php dans le dossier d— —d /d.php.
Regardons d'abord a.php :
<?php $file_name = 'a.php'; echo "this is a.php"; echo "<hr>"; require('c/c.php'); ?>
C'est un code très simple, après impression, il inclut c/c.php. Ensuite, nous devons regarder c/c. .php :
<?php $c_file_name = 'c.php'; echo 'this is c.php, is required by ' . $file_name; echo "<hr>"; require('../d/d.php'); ?>
Imprimer la sortie " ceci est c.php, est requis par a.php ", $file_name est une variable définie dans a.php. À la fin, d.php est inclus. Parce que le dossier d est une couche au-dessus du fichier c.php actuel, selon le bon sens, nous écrirons naturellement le chemin comme "../d/d.php". Mais malheureusement, une erreur sera signalée. La raison en est que lorsque vous incluez d'autres fichiers dans un fichier inclus tel que c.php, le chemin est relatif au fichier parent le plus externe, c'est-à-dire relatif à a.php, ce qui peut être compris comme parce que vous êtes inclus par moi. , donc tu dois compter sur moi. Cela semble très mystérieux, mais le principe est en réalité très simple : vous pouvez considérer require ('c/c.php'); comme le code du fichier c/c.php, pour que notre a.php ressemble à ceci. :
<?php $file_name = 'a.php'; echo "this is a.php"; echo "<hr>"; // require('c/c.php'); $c_file_name = 'c.php'; echo 'this is c.php, is required by ' . $file_name; echo "<hr>"; require('../d/d.php'); ?>
À ce stade, vous pouvez voir que lorsque nous voulons inclure le fichier d/d.php, le chemin est-il erroné à l'instant ? Parce que maintenant nous sommes dans le code a.php, nous sommes relatifs au fichier a.php, bien sûr, le chemin devrait être require('d/d.php'); Nous modifions le code comme suit :
<?php $file_name = 'a.php'; echo "this is a.php"; echo "<hr>"; // require('c/c.php'); $c_file_name = 'c.php'; echo 'this is c.php, is required by ' . $file_name; echo "<hr>"; require('d/d.php'); ?>
À ce stade, vous n'avez pas encore compris le sens, vous devez donc regarder en bas. Regardons b/b.php :
<🎜. ><?php $file_name = 'b.php'; echo "this is b.php"; echo "<hr>"; require('../c/c.php'); ?>
<?php $file_name = 'b.php'; echo "this is b.php"; echo "<hr>"; // require('../c/c.php'); $c_file_name = 'c.php'; echo 'this is c.php, is required by ' . $file_name; echo "<hr>"; require('d/d.php'); ?>
<?php $c_file_name = 'c.php'; echo 'this is c.php, is required by ' . $file_name; echo "<hr>"; require(dirname(FILE) . '/../d/d.php'); ?>
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!