Die akzeptierte Antwort von Pekka ist unvollständig und im Allgemeinen irreführend. Wenn die Datei als relativer Pfad bereitgestellt include
wird, sucht das aufgerufene Sprachkonstrukt folgendermaßen danach.
Zunächst werden die Pfade der Umgebungsvariablen durchlaufen include_path
, mit denen festgelegt werden kann ini_set
. Wenn dies fehlschlägt, wird im eigenen Verzeichnis des aufrufenden Skripts gesucht dirname(__FILE__)
( __DIR__
mit php> = 5.3). Wenn dies ebenfalls fehlschlägt, wird nur dann im Arbeitsverzeichnis gesucht! Es stellt sich nur heraus, dass die Umgebungsvariable standardmäßig include_path
mit .
dem aktuellen Arbeitsverzeichnis beginnt . Dies ist der einzige Grund, warum zuerst im aktuellen Arbeitsverzeichnis gesucht wird. Siehe http://php.net/manual/en/function.include.php .
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.
Die richtige Antwort auf den ersten Teil der Frage lautet also, dass es wichtig ist, wo sich das enthaltene aufrufende Skript befindet. Die Antwort auf den letzten Teil der Frage lautet, dass das anfängliche Arbeitsverzeichnis in einem Webserverkontext das Verzeichnis des aufgerufenen Skripts ist, das alle anderen enthält, während es von PHP verarbeitet wird. In einem Befehlszeilenkontext ist das anfängliche Arbeitsverzeichnis das, was auch immer es ist, wenn PHP an der Eingabeaufforderung aufgerufen wird, nicht unbedingt das Verzeichnis, in dem sich das aufgerufene Skript befindet. Das aktuelle Arbeitsverzeichnis kann jedoch zur Laufzeit mit der PHP-Funktion geändert werden chdir
. Siehe http://php.net/manual/en/function.chdir.php .
Dieser Absatz wurde hinzugefügt, um andere Antworten zu kommentieren. Einige haben erwähnt, dass das Verlassen auf include_path
weniger robust ist und es daher vorzuziehen ist, vollständige Pfade wie ./path
oder zu verwenden __DIR__ . /path
. Einige sagten sogar, dass .
es nicht sicher ist , sich auf das Arbeitsverzeichnis selbst zu verlassen, da es geändert werden kann. Manchmal müssen Sie sich jedoch auf Umgebungswerte verlassen. Beispielsweise möchten Sie möglicherweise include_path
leer setzen, damit das Verzeichnis des aufrufenden Skripts der erste Ort ist, an dem gesucht wird, noch vor dem aktuellen Arbeitsverzeichnis. Der Code wurde möglicherweise bereits regelmäßig aus externen Quellen geschrieben und aktualisiert, und Sie möchten das Präfix nicht __DIR__
jedes Mal neu einfügen, wenn der Code aktualisiert wird.