include dirname(__FILE__).'/../../index.php';
ist hier die beste Wahl und vermeidet die meisten relativen Pfadfehler, die bei anderen Lösungen auftreten können.
In der Tat wird das Include gezwungen, immer relativ zur Position des aktuellen Skripts zu sein, an der dieser Code platziert ist (welcher Speicherort höchstwahrscheinlich stabil ist, da Sie die Architektur Ihrer Anwendung definieren). Dies unterscheidet sich von include '../../index.php'
der einfachen Ausführung , die sich relativ zum ausführenden (auch als "aufrufend" bezeichneten) Skript und dann relativ zum aktuellen Arbeitsverzeichnis bezieht , das auf das übergeordnete Skript verweist, das Ihr Skript enthält, anstatt aus dem Pfad Ihres enthaltenen Skripts aufzulösen .
Aus der PHP-Dokumentation:
Dateien werden basierend auf dem angegebenen Dateipfad oder, falls keiner angegeben ist, dem angegebenen include_path eingeschlossen. Wenn die Datei nicht im include_path gefunden wird, überprüft include schließlich das eigene Verzeichnis des aufrufenden Skripts und das aktuelle Arbeitsverzeichnis, bevor ein Fehler auftritt.
Und der älteste Beitrag, den ich unter Berufung auf diesen Trick gefunden habe, stammt aus dem Jahr 2003 von Tapken .
Sie können mit folgendem Setup testen:
Erstellen Sie ein Layout wie folgt:
htdocs
¦ parent.php
¦ goal.php
¦
+---sub
¦ included.php
¦ goal.php
In parent.php
, setzen Sie:
<?php
include dirname(__FILE__).'/sub/included.php';
?>
In sub/included.php
, setzen Sie:
<?php
print("WRONG : " . realpath('goal.php'));
print("GOOD : " . realpath(dirname(__FILE__).'/goal.php'));
?>
Ergebnis beim Zugriff parent.php
:
WRONG : X:\htdocs\goal.php
GOOD : X:\htdocs\sub\goal.php
Wie wir sehen können, wird der Pfad im ersten Fall aus dem aufrufenden Skript aufgelöst parent.php
, während mit dem dirname(__FILE__).'/path'
Trick das Einschließen aus dem Skript erfolgt, included.php
in dem der Code platziert ist.
Beachten Sie, dass das Folgende NICHT dem obigen Trick entspricht, der an anderer Stelle gelesen werden kann:
include '/../../index.php';
In der Tat funktioniert /
das Voranstellen , aber es wird genau wie include ../../index.php
im aufrufenden Skript aufgelöst (der Unterschied besteht darin, dass include_path
es nicht nachgeschaut wird, wenn es fehlschlägt). Aus dem PHP-Dokument :
Wenn ein Pfad definiert ist - ob absolut (beginnend mit einem Laufwerksbuchstaben oder \ unter Windows oder / auf Unix / Linux-Systemen) oder relativ zum aktuellen Verzeichnis (beginnend mit. Oder ..) - wird der include_path vollständig ignoriert.