Heim > Backend-Entwicklung > PHP-Tutorial > Codebeispiele für „Require'- und „Include'-Pfadprobleme in PHP

Codebeispiele für „Require'- und „Include'-Pfadprobleme in PHP

怪我咯
Freigeben: 2023-03-12 20:24:01
Original
1513 Leute haben es durchsucht

Dieser Artikel führt hauptsächlich die detaillierte Erklärung von require und include path-Problemen in PHP ein. Freunde, die es benötigen, können sich auf

1 Absoluter Pfad beziehen. Relativer Pfad und nicht spezifizierter Pfad. Bestimmen Sie den Pfad

Relativer Pfad

Relativer Pfad bezieht sich auf den Pfad, der mit . beginnt, zum Beispiel

Der Code lautet wie folgt:

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

Absoluter Pfad

Der absolute Pfad ist ein Pfad, der mit / oder einem ähnlichen Laufwerksbuchstaben wie C beginnt: / unter Windows kann der vollständige Pfad ohne Referenzpfad eindeutig sein. Der

-Code lautet beispielsweise wie folgt:

/apache/wwwroot/site/a/a.php
c:/wwwroot/site/a/a.php
Nach dem Login kopieren

Unbestimmter Pfad

Alles, was nicht mit oder / beginnt, ist kein Windows-Laufwerksbuchstabe:/ Der Pfad am Anfang, z. B.

, der Code lautet wie folgt:

a/a.php  
common.inc.php,
Nach dem Login kopieren

Zuerst dachte ich, das sei auch ein relativer Pfad, aber in PHPs Include /require Einschlussmechanismus, diese Art von Pfad beginnt mit . Die Handhabung relativer Pfade ist völlig anders. 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 Referenzverzeichnis ist das Programm. Führen Sie das Verzeichnis aus, 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

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

Beispiel 3

A erfordert '.. /b .php'; //Dann B=[SITE]/app/b.php
B erfordert '../c.php' //Dann C=[SITE]/app/c.php Nicht [SITE] /c.php

Beispiel 4:

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

Beispiel 5

Definiert in A require '../inc/b.php' // Dann B=[SITE]/app/inc/b.php
Definiert in B require ' ./c /c.php'; // Dann C immer noch =[SITE]/app/test/c/c.php Nicht [SITE]/app/inc/c/c.php

Beispiel 6

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

Absoluter Pfad

Absolute Pfade sind relativ einfach und verursachen weniger Verwirrung und Fehler. require|inclue entspricht Dateien 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 FILE eine Magic-Konstante ist, die der PHP-Konstante entspricht schreibt diese Anweisung jederzeit in den absoluten Pfad, in dem sich die Datei befindet. Dirname (DATEI) zeigt also immer auf den absoluten Pfad der PHP-Datei, in die diese Anweisung geschrieben wird, und hat nichts damit zu tun, ob die Datei enthalten ist und verwendet wird durch andere Dateien.

Beispiel 1

Required '../b.php' ist in A definiert; // Dann ist B=[SITE]/app/b.php
Require dirname( ist definiert in B FILE).'/c.php'; // Dann B=[SITE]/app/c.php

Beispiel 2

A definiert require '../inc/b . php'; // Dann ist B=[SITE]/app/inc/b.php
B ist in require dirname(FILE) definiert.'/c.php'; /inc /c.php liegt immer im selben Verzeichnis wie B
Fazit: Egal, ob B von A eingebunden und genutzt 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. 未确定路径

首先在逐一用include_path中定义的包含目录来拼接[未确定路径],找到存在的文件则包含成功退出,如果没有找到,则用执行require语句的php文件所在目录来拼接[未确定路径]组成的全路径去查找该文件,如果文件存在则包含成功退出,否则表示包含文件不存在,出错。 未确定路径比较容易搞混不建议使用。

5. 解决方案

由于“相对路径”中的“参照目录”是执行入口文件所在目录,“未确定”路径也比较容易混淆,因此最好的解决方法是使用“绝对路径”; 例如b.php的内容如下,无论在哪里require b.php都是以b.php的路径为参照来require c.php的

$dir = dirname(FILE);
require($dir . '../c.php');
或者定义一个通用函数 import.php,将其设置为“自动提前引入文件”,在php.ini做如下配置

更改配置项(必须)auto_prepend_file = "C:\xampp\htdocs\auto_prepend_file.php"
更改配置项(可选)allow_url_include = On

import.php内容如下

代码如下:

function import($path) {    
    $old_dir = getcwd();        // 保存原“参照目录”
    chdir(dirname(FILE));    // 将“参照目录”更改为当前脚本的绝对路径
    require_once($path);
    chdir($old_dir);            // 改回原“参照目录”
}
Nach dem Login kopieren

这样就可以使用import()函数来require文件了,无论包含多少级“参照目录”都是当前文件

Das obige ist der detaillierte Inhalt vonCodebeispiele für „Require'- und „Include'-Pfadprobleme in PHP. 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