Absoluten Pfad des aktuellen Skripts abrufen

Ich habe lange gesucht und eine Menge verschiedener Lösungen und Variablen gefunden, die Informationen zum absoluten Pfad enthalten. Aber sie scheinen unter einigen Bedingungen zu funktionieren und unter anderen nicht. Gibt es einen Königsweg, um den absoluten Pfad des ausgeführten Skripts in PHP zu ermitteln? Bei mir wird das Skript von der Kommandozeile aus ausgeführt, aber eine Lösung sollte genauso gut funktionieren, wenn sie im Apache usw. ausgeführt wird.

Klarstellung: Das ursprünglich ausgeführte Skript, nicht unbedingt die Datei, in der die Lösung kodiert ist.

Die Konstante __FILE__ gibt Ihnen den absoluten Pfad zur aktuellen Datei.

Update:

Die Frage wurde geändert, um zu fragen, wie man das ursprünglich ausgeführte Skript anstelle des aktuell laufenden Skripts abrufen kann. Der einzige (??) zuverlässige Weg, dies zu tun, ist die Verwendung der Funktion debug_backtrace.

$stack = debug_backtrace();
$firstFrame = $stack[count($stack) - 1];
$initialFile = $firstFrame['file'];
Kommentare (16)

Beispiele für: https://(www.)example.com/subFolder/myfile.php?var=blabla#555

// ======= PATHINFO ====== //
$x = pathinfo($url);
$x['dirname']      🡺 https://example.com/subFolder
$x['basename']     🡺                               myfile.php?
$x['extension']    🡺                                      php?k=blaa#12345 // Unsecure! also, read my notice about hashtag parts    
$x['filename']     🡺                               myfile

// ======= PARSE_URL ====== //
$x = parse_url($url);
$x['scheme']       🡺 https
$x['host']         🡺         example.com
$x['path']         🡺                    /subFolder/myfile.php
$x['query']        🡺                                          k=blaa
$x['fragment']     🡺                                                 12345 // ! read my notice about hashtag parts

//=================================================== //
//========== self-defined SERVER variables ========== //
//=================================================== //
$_SERVER["DOCUMENT_ROOT"]  🡺 /home/user/public_html
$_SERVER["SERVER_ADDR"]    🡺 143.34.112.23
$_SERVER["SERVER_PORT"]    🡺 80(or 443 etc..)
$_SERVER["REQUEST_SCHEME"] 🡺 https                                         //similar: $_SERVER["SERVER_PROTOCOL"] 
$_SERVER['HTTP_HOST']      🡺         example.com (or with WWW)             //similar: $_SERVER["ERVER_NAME"]
$_SERVER["REQUEST_URI"]    🡺                       /subFolder/myfile.php?k=blaa
$_SERVER["QUERY_STRING"]   🡺                                             k=blaa
__FILE__                   🡺 /home/user/public_html/subFolder/myfile.php
__DIR__                    🡺 /home/user/public_html/subFolder              //same: dirname(__FILE__)
$_SERVER["REQUEST_URI"]    🡺                       /subFolder/myfile.php?k=blaa
parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH)🡺  /subFolder/myfile.php 
$_SERVER["PHP_SELF"]       🡺                       /subFolder/myfile.php

// ==================================================================//
//if "myfile.php" is included in "PARENTFILE.php" , and you visit  "PARENTFILE.PHP?abc":
$_SERVER["SCRIPT_FILENAME"]🡺 /home/user/public_html/parentfile.php
$_SERVER["PHP_SELF"]       🡺                       /parentfile.php
$_SERVER["REQUEST_URI"]    🡺                       /parentfile.php?abc
__FILE__                   🡺 /home/user/public_html/subFolder/myfile.php

// =================================================== //
// ================= handy variables ================= //
// =================================================== //
//If site uses HTTPS:
$HTTP_or_HTTPS = ((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS']!=='off') || $_SERVER['SERVER_PORT']==443) ? 'https://':'http://' );            //in some cases, you need to add this condition too: if ('https'==$_SERVER['HTTP_X_FORWARDED_PROTO'])  ...

//To trim values to filename, i.e. 
basename($url)             🡺 myfile.php

//excellent solution to find origin
$debug_files = debug_backtrace();       
$caller_file = count($debug_files) ? $debug_files[count($debug_files) - 1]['file'] : __FILE__;

Achtung!!!

  • Hashtag (#...) URL-Teile können nicht von PHP (serverseitig) erkannt werden. Verwenden Sie dafür JavaScript.
  • DIRECTORY_SEPARATOR gibt \ für Windows-Hosting zurück, statt /.



Für WordPress

//(let's say, if wordpress is installed in subdirectory:  http://example.com/wpdir/)
home_url()                      🡺 http://example.com/wpdir/        //if is_ssl() is true, then it will be "https"
get_stylesheet_directory_uri()  🡺 http://example.com/wpdir/wp-content/themes/THEME_NAME  [same: get_bloginfo('template_url') ]
get_stylesheet_directory()      🡺 /home/user/public_html/wpdir/wp-content/themes/THEME_NAME
plugin_dir_url(__FILE__)        🡺 http://example.com/wpdir/wp-content/themes/PLUGIN_NAME
plugin_dir_path(__FILE__)       🡺 /home/user/public_html/wpdir/wp-content/plugins/PLUGIN_NAME/  
Kommentare (2)
echo realpath(dirname(__FILE__));

Wenn Sie dies in einer eingebundenen Datei platzieren, wird der Pfad zu diesem Include ausgegeben. Um den Pfad des übergeordneten Skripts zu erhalten, ersetzen Sie __FILE__ mit $_SERVER['PHP_SELF']. Aber seien Sie sich bewusst, dass PHP_SELF ein Sicherheitsrisiko darstellt!

Kommentare (12)