PHP: Pfadprobleme erfordern und einschließen

黄舟
Freigeben: 2023-03-11 11:48:01
Original
1372 Leute haben es durchsucht

FILE ist eine vorverarbeitete Variable, die vor der Ausführung verarbeitet und ersetzt wurde, bevor die Datei eingebunden wird.
Der Inhalt der für include erforderlichen Datei wird zur Laufzeit verarbeitet und der Code wird im Bereich der include-Datei ausgeführt, einem relativen Pfad relativ zur einschließenden Datei .

1 Absoluter Pfad, relativer Pfad und unbestimmter Pfad

Relativer Pfad

Relativer Pfad bezieht sich auf den Pfad, der mit . beginnt, z. B.

./a / a.php (relativ zum aktuellen Verzeichnis)
../common.inc.php (relativ zum übergeordneten Verzeichnis),

absoluter Pfad

Der Der absolute Pfad beginnt mit / oder Windows C:/. Ähnlich wie der Pfad, der mit dem Laufwerksbuchstaben beginnt, kann der vollständige Pfad die endgültige Adresse der Datei ohne Referenzpfad eindeutig bestimmen. Zum Beispiel

/apache/wwwroot/site/a/a.php
c:/wwwroot/site/a/a.php

Unbestimmter Pfad

Jeder Pfad, der nicht mit . oder / beginnt, noch mit dem Windows-Laufwerksbuchstaben:/, wie zum Beispiel

a/a.php
common.inc.php,

Zuerst dachte ich, dass dies auch ein relativer Pfad sei, aber im Include/Require-Mechanismus von PHP wird diese Art von Pfad völlig anders gehandhabt als relative Pfade, die mit beginnen. require './a.php' und require 'a.php' sind unterschiedlich!

Im Folgenden werden die Verarbeitungsmethoden dieser drei Arten von Include-Pfaden analysiert: Denken Sie zunächst an eine Schlussfolgerung: Wenn der Include-Pfad ein relativer Pfad oder ein absoluter Pfad ist, wird er nicht zu include_path (der Umgebungsvariablen include_path) verschoben definiert in php.ini, oder verwenden Sie die Einstellung set_include_path(...), um die Datei im Programm zu finden.

Beschreibung der Testumgebung

Hinweis: Die folgende Diskussion und Schlussfolgerung basieren auf dieser Umgebung: Angenommen, A=http://www.xxx.com/app/test/a.php, hervorheben Auch hier gilt die folgende Diskussion für den Fall des direkten Zugriffs auf A.

2. Relativer Pfad:

Der relative Pfad erfordert ein Referenzverzeichnis, um den endgültigen Pfad der Datei zu bestimmen, unabhängig davon, wie viele Verschachtelungsebenen enthalten sind die Programmausführung Das Verzeichnis, in dem sich die Eintragsdatei befindet.

Beispiel 1

A definiert require './b/b.php'; // dann B=[SITE]/app/test/b/b.php
B Definition require './c.php'; // Dann ist C=[SITE]/app/test/c.php nicht [SITE]/app/test/b/c.php

Beispiel 2

A definiert require './b/b.php'; // Then B=[SITE]/app/test/b/b.php
B definiert require '.. /c. php'; // Dann ist C=[SITE]/app/c.php nicht [SITE]/app/test/c.php

Beispiel 3

Definiert in A require '../b.php'; //Then B=[SITE]/app/b.php
Definiert in B require '../c.php'; //Then C= [SITE ]/app/c.php ist nicht [SITE]/c.php

Beispiel 4:

A definiert require '../b.php' ; / Dann B=[SITE]/app/b.php
Require './c/c.php' ist in B definiert; // Dann C=[SITE]/app/test/c/c.php Nicht [SITE]/app/c/c.php

Beispiel 5

A definiert require '../inc/b.php'; // dann B= [SITE]/app/inc/b.php
B definiert require './c/c.php' // Then C still =[SITE]/app/test/c/c.php No [SITE] /app/inc/c/c.php

Beispiel 6

A defines require '../inc/b.php' // Then B=[ SITE]/app/inc/b.php
B erfordert require './c.php' // Dann ist C=[SITE]/app/test/c.php nicht [SITE]/ app/inc/ c.php

3. Absoluter Pfad

Der absolute Pfad ist relativ einfach und verursacht weniger Verwirrung und Fehler. require|inclue entspricht der Datei auf der Festplatte . .

require '/wwwroot/xxx.com/app/test/b.php' // Unter Linux
require 'c:/wwwroot/xxx.com/app/test/b.php'; ; // In Windows wird

dirname(FILE) auch als Verzeichnis in Form eines absoluten Pfads berechnet, aber bitte beachten Sie, dass es sich bei FILE um eine Magic-Konstante handelt ist gleich Der absolute Pfad der PHP-Datei, in die diese Anweisung geschrieben wird. Daher zeigt dirname(FILE) immer auf den absoluten Pfad der PHP-Datei, in die diese Anweisung geschrieben wird von anderen Dateien verwendet.

Beispiel 1

A defines require '../b.php'; FILE).'/c.php'; // Then B=[SITE]/app/c.php

Beispiel 2

Definieren Sie require '../inc/b.php'; in A php'; // Dann befindet sich B=[SITE]/app/inc/c.php immer im selben Verzeichnis wie B

Fazit: Egal ob B enthalten ist und von A verwendet wird oder direkt darauf zugegriffen wird

B if require dirname(FILE).'/c.php'; // bezieht sich immer auf c.php Datei im selben Verzeichnis wie B;

B if require dirname(FILE) // Verweisen Sie immer auf die c.php-Datei im übergeordneten Verzeichnis, in dem sich die B-Datei befindet lokalisiert;
B if require dirname(FILE).'/c/c.php'; Verweisen Sie dann immer auf die c.php-Datei im Unterverzeichnis c des Verzeichnisses, in dem sich die B-Datei befindet

4. Unbestimmter Pfad

Verwenden Sie zuerst die in include_path definierten Verzeichnisse, um [unbestimmten Pfad] zu verbinden. Wenn dies der Fall ist, wird sie erfolgreich beendet nicht gefunden, verwenden Sie das Verzeichnis, in dem sich die PHP-Datei befindet, die die Anforderungsanweisung ausführt, um den vollständigen Pfad aus [unbestimmtem Pfad] zusammenzufügen, um die Datei zu finden. Wenn die Datei vorhanden ist, bedeutet dies, dass sie erfolgreich beendet wurde, andernfalls bedeutet dies, dass sie enthalten ist Die Datei existiert nicht und es tritt ein Fehler auf. Unbestimmte Pfade können leicht verwechselt werden und werden nicht empfohlen.

5. Lösung

Da das „Referenzverzeichnis“ in „relativer Pfad“ das Verzeichnis ist, in dem sich die Ausführungseintragsdatei befindet, ist der „unbestimmte“ Pfad auch leichter zu verwechseln Die beste Lösung besteht darin, den „absoluten Pfad“ zu verwenden. Der Inhalt von b.php lautet beispielsweise wie folgt: Der Pfad von b.php wird als Referenz für die Anforderung von c verwendet. php

$dir = dirname(FILE );

require($dir . '../c.php');



Oder definieren Sie eine allgemeine Funktion import.php , stellen Sie es auf „Dateien automatisch im Voraus importieren“ ein. Nehmen Sie die folgende Konfiguration in php.ini vor

Ändern Sie das Konfigurationselement (erforderlich) auto_prepend_file = "C:xampphtdocsauto_prepend_file.php"

Ändern Sie das Konfigurationselement (optional) Allow_url_include = On



import Der Inhalt von .php ist wie folgt

Auf diese Weise können Sie die Funktion import() verwenden, um die Datei anzufordern. Egal wie viele Ebenen von „Referenzverzeichnissen“ sie enthält, es ist die aktuelle Datei
function import($path) {    
    $old_dir = getcwd();        // 保存原“参照目录”
    chdir(dirname(FILE));    // 将“参照目录”更改为当前脚本的绝对路径
    require_once($path);
    chdir($old_dir);            // 改回原“参照目录”
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonPHP: Pfadprobleme erfordern und einschließen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!