Maison > développement back-end > tutoriel php > Explication détaillée de l'utilisation de l'inclusion de fichiers require() en PHP

Explication détaillée de l'utilisation de l'inclusion de fichiers require() en PHP

黄舟
Libérer: 2023-03-11 11:44:02
original
2426 Les gens l'ont consulté

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 :

Explication détaillée de lutilisation de linclusion de fichiers require() en PHP

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 = &#39;a.php&#39;;
    
    echo "this is a.php";
    echo "<hr>";
    
    require(&#39;c/c.php&#39;);
    
 ?>
Copier après la connexion

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 = &#39;c.php&#39;;
    
    echo &#39;this is c.php, is required by &#39; . $file_name;
    echo "<hr>";
    
    require(&#39;../d/d.php&#39;);
 ?>
Copier après la connexion

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 = &#39;a.php&#39;;
    
    echo "this is a.php";
    echo "<hr>";
    
    // require(&#39;c/c.php&#39;);
    $c_file_name = &#39;c.php&#39;;
    
    echo &#39;this is c.php, is required by &#39; . $file_name;
    echo "<hr>";
    
    require(&#39;../d/d.php&#39;);
 ?>
Copier après la connexion

À 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 = &#39;a.php&#39;;
    
    echo "this is a.php";
    echo "<hr>";
    
    // require(&#39;c/c.php&#39;);
    $c_file_name = &#39;c.php&#39;;
    
    echo &#39;this is c.php, is required by &#39; . $file_name;
    echo "<hr>";
    
    require(&#39;d/d.php&#39;);
 ?>
Copier après la connexion

À ce stade, vous n'avez pas encore compris le sens, vous devez donc regarder en bas. Regardons b/b.php :

<🎜. >
<?php 
    $file_name = &#39;b.php&#39;;
    
    echo "this is b.php";
    echo "<hr>";
        
    require(&#39;../c/c.php&#39;);
 ?>
Copier après la connexion
Aucune explication requise D'accord, il n'y a pas de problème, mais lorsque vous remplacez require('../c/c.php'); par le code dans c/c.php, vous rencontrerez un problème. nous venons de modifier Supprimez le code dans c/c.php et changez require('../d/d.php'); en require('d/d.php'); Regardez le code inclus ci-dessous :

<?php 
    $file_name = &#39;b.php&#39;;
    
    echo "this is b.php";
    echo "<hr>";
        
    // require(&#39;../c/c.php&#39;);
    $c_file_name = &#39;c.php&#39;;
    
    echo &#39;this is c.php, is required by &#39; . $file_name;
    echo "<hr>";
    
    require(&#39;d/d.php&#39;);
 ?>
Copier après la connexion
Donc, par rapport à b/b.php, le chemin de require('d/d.php'); il devrait être require ('../d/d.php'); C'est exact. Vous revenez en arrière et modifiez le chemin requis dans c/c.php, mais c'est faux. Après l'avoir modifié, b/b.php peut fonctionner normalement, mais a/a.php ne le peut pas. /c ? .php, ça affecte tout le corps, que dois-je faire ?

Pour le moment, nous revenons au dirname(FILE) mentionné au début de l'article. C'est une bonne chose et peut résoudre complètement les problèmes ci-dessus. En l'utilisant, vous n'avez pas à vous soucier du fichier qui contient votre fichier et du chemin sous lequel il se trouve. Vous n'avez pas à vous soucier du niveau du fichier parent, car le nom de répertoire (FILE) peut spécifier le chemin relatif au fichier. fichier actuel. En d'autres termes, nous devons changer le chemin require dans notre c/c.php en :

<?php 
    $c_file_name = &#39;c.php&#39;;
    
    echo &#39;this is c.php, is required by &#39; . $file_name;
    echo "<hr>";
    
    require(dirname(FILE) . &#39;/../d/d.php&#39;);
 ?>
Copier après la connexion
Ici, nous devons uniquement utiliser c/c.php comme référence, par rapport à celui-ci, d /d.php est au niveau précédent. De cette façon, il n'y a qu'une seule norme, c'est-à-dire que je prévaudrai. Que vous m'incluiez ou qu'il m'inclue, je m'utilise uniquement comme critère, et les fichiers que je souhaite inclure ne sont que relatifs à moi-même.

Pour les compagnons pratiquants qui ne comprennent pas le nom de répertoire (FILE), veuillez le rechercher sur Google, c'est très simple.

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal