Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der Verwendung der Dateieinbindung require() in PHP

Detaillierte Erläuterung der Verwendung der Dateieinbindung require() in PHP

黄舟
黄舟Original
2017-06-25 10:28:212394Durchsuche

Als ich mir in der Vergangenheit den Quellcode eines PHP-Frameworks angesehen habe, war es seltsam, dass beim Einbinden der Datei Verzeichnisname(DATEI) verwendet wurde um den Dateipfad zusammenzusetzen. Nein, ich kannte die Vorteile dieser Vorgehensweise, und später entdeckte ich schließlich den Grund.

Sehen wir uns ein einfaches Beispiel an:

Es gibt drei PHP-Dateien a, b und c. a.php befindet sich im Stammverzeichnis der Website, b.php befindet sich im b-Ordner – b/b.php, und c.php befindet sich im c-Ordner – c/c.php. Etwas Verwirrung? Aus dem Bild geht klar hervor:

Detaillierte Erläuterung der Verwendung der Dateieinbindung require() in PHP

a.php und b.php enthalten beide c.php, und schließlich enthält c.php eine PHP-Datei im d-Ordner – –d /d.php.

Schauen wir uns zuerst a.php an:

<?php 
    
    $file_name = &#39;a.php&#39;;
    
    echo "this is a.php";
    echo "<hr>";
    
    require(&#39;c/c.php&#39;);
    
 ?>

Es ist ein sehr einfacher Code, der c/c.php enthält .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;);
 ?>

Druckausgabe „Dies ist c.php, wird von a.php benötigt“, $file_name ist eine in a.php definierte Variable. Am Ende ist d.php enthalten. Da sich der d-Ordner eine Ebene über der aktuellen c.php-Datei befindet, schreiben wir den Pfad nach gesundem Menschenverstand natürlich als „../d/d.php“. Aber leider wird ein Fehler gemeldet. Der Grund dafür ist, dass, wenn Sie andere Dateien in eine eingebundene Datei wie c.php einbinden, der Pfad relativ zur äußersten übergeordneten Datei ist, also relativ zu a.php, was so verstanden werden kann, dass Sie von mir eingebunden werden. , also musst du dich auf mich verlassen. Es scheint sehr mysteriös, aber das Prinzip ist eigentlich sehr einfach: Sie können sich require ('c/c.php'); als Code in der Datei c/c.php vorstellen, sodass unsere a.php so aussehen kann :

<?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;);
 ?>

An diesem Punkt können Sie sehen, dass der Pfad gerade falsch ist, wenn wir die Datei d/d.php einbinden möchten? Da wir uns jetzt im a.php-Code befinden, sind wir natürlich relativ zur a.php-Datei, der Pfad sollte require('d/d.php'); sein. Wir ändern den Code wie folgt:

<?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;);
 ?>

Zu diesem Zeitpunkt haben Sie die Bedeutung noch nicht verstanden, also müssen Sie noch einmal auf b/b.php schauen:

<?php 
    $file_name = &#39;b.php&#39;;
    
    echo "this is b.php";
    echo "<hr>";
        
    require(&#39;../c/c.php&#39;);
 ?>

Keine Erklärung erforderlich Okay, es gibt kein Problem, aber wenn Sie require('../c/c.php'); durch den Code in c/c.php ersetzen, werden Sie ein Problem finden den wir gerade geändert haben. Entfernen Sie den Code in c/c.php und ändern Sie require('../d/d.php'); in require('d/d.php'); Sehen Sie sich den enthaltenen Code unten an:

<?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;);
 ?>

Im Vergleich zu b/b.php ist der Pfad von require('d/d.php'); falsch, er sollte require ('../d/d.php') sein. ; Das stimmt. Sie gehen zurück und ändern den erforderlichen Pfad in c/c.php, aber er ist falsch. Nachdem Sie ihn geändert haben, kann b/b.php normal ausgeführt werden, a/a.php jedoch nicht /c? .php, es betrifft den gesamten Körper, was soll ich tun?

Zu diesem Zeitpunkt kehren wir zum am Anfang des Artikels erwähnten Verzeichnisnamen (DATEI) zurück. Dies ist eine gute Sache und kann die oben genannten Probleme vollständig lösen. Wenn Sie es verwenden, müssen Sie sich keine Gedanken darüber machen, welche Datei Ihre Datei enthält und unter welchem ​​Pfad sie sich befindet. Sie müssen sich keine Gedanken über die Ebene der übergeordneten Datei machen, da dirname (DATEI) den Pfad relativ zu angeben kann aktuelle Datei. Mit anderen Worten, wir müssen den erforderlichen Pfad in unserer c/c.php ändern in:

<?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;);
 ?>

Hier müssen wir nur c/c.php als Referenz verwenden, d /d.php befindet sich auf der vorherigen Ebene. Auf diese Weise gibt es nur einen Standard, und das heißt, ich werde mich durchsetzen. Ob Sie mich einbeziehen oder er mich einbezieht, ich verwende nur mich selbst als Kriterium, und die Dateien, die ich einbeziehen möchte, beziehen sich nur auf mich selbst.

Für Mitpraktizierende, die Dirname (DATEI) nicht verstehen, bitte googeln, es ist sehr einfach.

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Verwendung der Dateieinbindung require() in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn