Heim >Backend-Entwicklung >PHP-Problem >Was soll ich tun, wenn das relative Verzeichnis in PHP nicht geöffnet werden kann?
Lösung für das relative PHP-Verzeichnis, das nicht geöffnet werden kann: 1. Verwenden Sie „absoluten Pfad“ 2. Definieren Sie eine allgemeine Funktion import.php, stellen Sie sie auf „Dateien automatisch im Voraus importieren“ ein und ändern Sie den Inhalt in php.ini als folgt „auto_prepend_file = „C:xampphtdocsauto_prepend_file.php““ reicht aus.
Die Betriebsumgebung dieses Tutorials: Windows 7-System, PHP-Version 8.1, Dell G3-Computer.
php relatives Verzeichnis kann nicht geöffnet werden? Zusammenfassung der Probleme mit Anforderungs- und Einbindungspfaden in PHP
Relative Pfade beziehen sich auf Pfade, die mit . beginnen, wie zum Beispiel
./a/a.php (相对当前目录) ../common.inc.php (相对上级目录),
Absolute Pfade beginnen mit / Oder C:/ unter Windows, ein ähnlicher Pfad, der mit einem Laufwerksbuchstaben beginnt. Der vollständige Pfad kann die endgültige Adresse der Datei ohne Referenzpfad eindeutig bestimmen. Zum Beispiel
/apache/wwwroot/site/a/a.php c:/wwwroot/site/a/a.php
Jeder Pfad, der nicht mit oder / beginnt, noch mit dem Windows-Laufwerksbuchstaben:/, wie zum Beispiel
a/a.php common.inc.php,
Zuerst dachte ich, das sei auch ein relativer Pfad. Aber im Include/Require-Inklusion-Mechanismus von PHP unterscheidet sich diese Art von Pfad völlig von der relativen Pfadverarbeitung, die mit beginnt. require './a.php' und require 'a.php' sind unterschiedlich!
Lassen Sie uns analysieren, wie diese drei Arten von Include-Pfaden verarbeitet werden: Denken Sie zunächst an eine Schlussfolgerung: Wenn der Include-Pfad ein relativer oder ein absoluter Pfad ist, wird er nicht zu include_path (der in php.ini definierten Umgebungsvariablen include_path) verschoben , oder im Programm Verwenden Sie set_include_path(...), um die Datei zu finden.
Hinweis: Die folgende Diskussion und Schlussfolgerung basieren auf dieser Umgebung: Angenommen A=http://www.xxx.com/app/test/a.php, betonen Sie erneut, dass die folgende Diskussion ist für den direkten Zugriff auf A.
Der relative Pfad erfordert ein Referenzverzeichnis, um den endgültigen Pfad der Datei zu bestimmen, unabhängig davon, wie viele Verschachtelungsebenen enthalten sind Verzeichnis, in dem sich die Programmausführungseintragsdatei befindet .
Beispiel 1
A中定义 require './b/b.php'; // 则B=[SITE]/app/test/b/b.php B中定义 require './c.php'; // 则C=[SITE]/app/test/c.php 不是[SITE]/app/test/b/c.php
Beispiel 2
A中定义 require './b/b.php'; // 则B=[SITE]/app/test/b/b.php B中定义 require '../c.php'; // 则C=[SITE]/app/c.php 不是 [SITE]/app/test/c.php
Beispiel 3
A中定义 require '../b.php'; //则B=[SITE]/app/b.php B中定义 require '../c.php'; //则C=[SITE]/app/c.php 不是 [SITE]/c.php
Beispiel 4:
A中定义 require '../b.php'; // 则B=[SITE]/app/b.php B中定义 require './c/c.php'; / /则C=[SITE]/app/test/c/c.php 不是 [SITE]/app/c/c.php
Beispiel 5
A中定义 require '../inc/b.php'; // 则B=[SITE]/app/inc/b.php B中定义 require './c/c.php'; // 则C还是=[SITE]/app/test/c/c.php 不是 [SITE]/app/inc/c/c.php
Beispiel 6
A中定义 require '../inc/b.php'; // 则B=[SITE]/app/inc/b.php B中定义 require './c.php'; // 则C=[SITE]/app/test/c.php 不是 [SITE]/app/inc/c.php
Absolute Pfade sind relativ einfach und es ist nicht leicht, Fehler zu machen . require|inclue entspricht der Datei auf der Festplatte.
require '/wwwroot/xxx.com/app/test/b.php'; // Linux中 require 'c:/wwwroot/xxx.com/app/test/b.php'; // windows中
dirname(__FILE__) wird auch als Verzeichnis in Form eines absoluten Pfads berechnet. Bitte beachten Sie jedoch, dass __FILE__ eine Magic-Konstante ist, die dem absoluten Pfad der PHP-Datei entspricht, in die diese Anweisung geschrieben wird zu jeder Zeit, daher zeigt dirname(__FILE__) immer auf den absoluten Pfad der PHP-Datei, in die diese Anweisung geschrieben wird, und hat nichts damit zu tun, ob die Datei von anderen Dateien eingebunden und verwendet wird.
Beispiel 1
A中定义 require '../b.php'; // 则B=[SITE]/app/b.php B中定义 require dirname(__FILE__).'/c.php'; // 则B=[SITE]/app/c.php
Beispiel 2
A中定义 require '../inc/b.php'; // 则B=[SITE]/app/inc/b.php B中定义 require dirname(__FILE__).'/c.php'; // 则B=[SITE]/app/inc/c.php 始终跟B在同一个目录
Schlussfolgerung: Egal, ob B enthalten ist und von A verwendet wird oder direkt darauf zugegriffen wird
B如果 require dirname(__FILE__).'/c.php'; // 则始终引用到跟B在同一个目录中的 c.php文件; B如果 require dirname(__FILE__).'/../c.php'; // 则始终引用到B文件所在目录的父目录中的 c.php文件; B如果 require dirname(__FILE__).'/c/c.php'; // 则始终引用到B文件所在目录的c子目录中的 c.php文件;
5. Lösung
„relativer Pfad“ das Verzeichnis ist, in dem sich die Ausführungseintragsdatei befindet, ist der „unbestimmte“ Pfad auch leichter zu verwechseln, daher ist die beste Lösung Verwenden Sie „Absoluter Pfad“ ; Der Inhalt von b.php lautet beispielsweise wie folgt: Der Pfad von b.php wird als Referenz für die Anforderung von c.php
$dir = dirname(__FILE__); require($dir . '../c.php');verwendet Die allgemeine Funktion import.php ist definiert und wird auf „Dateien automatisch im Voraus importieren“ eingestellt und in php.ini die folgende Konfiguration vorgenommen
更改配置项(必须)auto_prepend_file = "C:\xampp\htdocs\auto_prepend_file.php" 更改配置项(可选)allow_url_include = OnDer Inhalt von import.php lautet wie folgt
function import($path) { $old_dir = getcwd(); // 保存原“参照目录” chdir(dirname(__FILE__)); // 将“参照目录”更改为当前脚本的绝对路径 require_once($path); chdir($old_dir); // 改回原“参照目录” }Auf diese Weise können Sie Verwenden Sie die Funktion import(), um die Datei anzufordern, unabhängig davon, wie viele Ebenen von „Referenzverzeichnissen“ sie enthält. Aktuelle DateiEmpfohlenes Lernen: „
PHP-Video-Tutorial
“Das obige ist der detaillierte Inhalt vonWas soll ich tun, wenn das relative Verzeichnis in PHP nicht geöffnet werden kann?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!