Iskal sem visoko in nizko in dobil veliko različnih rešitev in spremenljivk, ki vsebujejo informacije za pridobitev absolutne poti. Vendar se zdi, da v nekaterih pogojih delujejo, v drugih pa ne. Ali obstaja en sam način za pridobitev absolutne poti do izvedene skripte v PHP? Skript se bo izvajal iz ukazne vrstice, vendar bi morala rešitev delovati enako dobro, če bi se izvajala v Apacheju itd.
Pojasnilo: To pomeni, da je treba navesti začetno izvedeno skripto in ne nujno datoteko, v kateri je rešitev zakodirana.
Konstanta __FILE__
vam bo podala absolutno pot do trenutne datoteke.
Posodobitev:
Vprašanje je bilo spremenjeno tako, da se sprašuje, kako pridobiti prvotno izvedeno skripto namesto trenutno zagnane skripte. Edini (??) zanesljiv način je uporaba funkcije debug_backtrace
.
$stack = debug_backtrace();
$firstFrame = $stack[count($stack) - 1];
$initialFile = $firstFrame['file'];
Primeri za: 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__;
Obvestilo!:
DIRECTORY_SEPARATOR
vrne \
za gostovanje v sistemu Windows namesto /
.//(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/
echo realpath(dirname(__FILE__));
Če to postavite v vključeno datoteko, se izpiše pot do te vključene datoteke. Če želite dobiti pot do nadrejene skripte, zamenjajte __FILE__
z $_SERVER['PHP_SELF']
. Vendar se zavedajte, da je PHP_SELF varnostno tveganje!