Heim >Backend-Entwicklung >PHP-Tutorial >PHP: Pfadprobleme erfordern und einschließen
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
Definieren Sie require '../inc/b.php'; in A php'; // Dann befindet sich B=[SITE]/app/inc/c.php immer 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
function import($path) { $old_dir = getcwd(); // 保存原“参照目录” chdir(dirname(FILE)); // 将“参照目录”更改为当前脚本的绝对路径 require_once($path); chdir($old_dir); // 改回原“参照目录” }
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!