Ein einfacher Weg , um den absoluten Pfad des haben anfänglich ausgeführte Skript , in dem Skript und jeder anderen Skript enthielt mit include
, require
, require_once
ist durch Verwendung eines konstanten und da den aktuellen Skript Pfades Speicherung des am Anfang Hauptskript :
define( 'SCRIPT_ROOT', __FILE__ );
Die obige Lösung ist geeignet, wenn es ein einziges "Hauptskript" gibt, das include
jedes andere benötigte Skript enthält, wie in den meisten Webanwendungen.
Wenn dies nicht der Fall ist und es möglicherweise mehrere "Intital-Skripte" gibt, kann jedes Skript beginnen, um Neudefinitionen zu vermeiden und den richtigen Pfad in der Konstante zu speichern:
if( ! defined( 'SCRIPT_ROOT' ) ) {
define( 'SCRIPT_ROOT`, __FILE__ );
}
Ein Hinweis zur (derzeit) akzeptierten Antwort :
Die Antwort besagt, dass der ursprünglich ausgeführte Skriptpfad das erste Element des von zurückgegebenen Arrays ist get_included_files()
.
Dies ist eine clevere und einfache Lösung, die zum Zeitpunkt des Schreibens (wir sind fast bei PHP 7.4.0) funktioniert .
In der Dokumentation wird jedoch nicht erwähnt, dass das ursprünglich ausgeführte Skript das erste Element des von zurückgegebenen Arrays ist get_included_files()
.
Wir lesen nur
Das ursprünglich aufgerufene Skript wird als "eingeschlossene Datei" betrachtet, daher wird es zusammen mit den Dateien aufgelistet, auf die include und family verweisen.
Zum Zeitpunkt des Schreibens ist das " ursprünglich aufgerufene Skript " das erste im Array, aber technisch gesehen gibt es keine Garantie dafür, dass sich dies in Zukunft nicht ändern wird.
Ein Hinweis zu realpath()
, __FILE__
und __DIR__
:
Andere haben in ihren Antworten die Verwendung vorgeschlagen __FILE__
, __DIR__
, dirname(__FILE__)
, realpath(__DIR__)
...
dirname(__FILE__)
ist gleich __DIR__
(eingeführt in PHP 5.3.0), also einfach verwenden __DIR__
.
Beide __FILE__
und __DIR__
sind immer absolute Pfade , realpath()
ist also unnötig.