Heim >Backend-Entwicklung >PHP-Problem >Was soll ich tun, wenn das relative Verzeichnis in PHP nicht geöffnet werden kann?

Was soll ich tun, wenn das relative Verzeichnis in PHP nicht geöffnet werden kann?

藏色散人
藏色散人Original
2022-12-01 09:25:425898Durchsuche

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.

Was soll ich tun, wenn das relative Verzeichnis in PHP nicht geöffnet werden kann?

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

1 Absolute Pfade, relative Pfade und unbestimmte Pfade

Relative Pfade

Relative Pfade beziehen sich auf Pfade, die mit . beginnen, wie zum Beispiel

./a/a.php (相对当前目录)    
../common.inc.php (相对上级目录),

Absolute Pfade

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

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, 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.

Beschreibung der Testumgebung

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.

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 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

3. Absolut Pfade

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文件;

4. Verwenden Sie zunächst die in include_path definierten Include-Verzeichnisse, um sie einzeln zu verbinden 1 [Unbekannter Pfad ermitteln]: Wenn eine vorhandene Datei gefunden wird, wird sie erfolgreich beendet. Wenn sie nicht gefunden wird, verwenden Sie das Verzeichnis, in dem sich die PHP-Datei befindet, die die Anforderungsanweisung ausführt, um den vollständigen Pfad zusammenzufügen, der aus [ besteht. unbestimmter Pfad], um die Datei zu finden, wird sie erfolgreich beendet, andernfalls bedeutet dies, dass die enthaltene Datei nicht existiert und ein Fehler auftritt. 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, 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 = On
Der 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 Datei

Empfohlenes 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!

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