Έχω ψάξει πολύ και έχω πάρει πολλές διαφορετικές λύσεις και μεταβλητές που περιέχουν πληροφορίες για να λάβω την απόλυτη διαδρομή. Φαίνεται όμως ότι λειτουργούν κάτω από ορισμένες συνθήκες και όχι κάτω από άλλες. Υπάρχει ένας αποτελεσματικός τρόπος για να λάβω την απόλυτη διαδρομή του εκτελούμενου σεναρίου στην PHP; Για μένα, το σενάριο θα εκτελεστεί από τη γραμμή εντολών, αλλά, μια λύση θα πρέπει να λειτουργεί εξίσου καλά αν εκτελεστεί μέσα στον Apache κ.λπ.
Διευκρίνιση: Το αρχικά εκτελεσμένο σενάριο, όχι απαραίτητα το αρχείο στο οποίο είναι κωδικοποιημένη η λύση .
Η σταθερά __FILE__
θα σας δώσει την απόλυτη διαδρομή προς το τρέχον αρχείο.
Ανανέωση:
Η ερώτηση άλλαξε ώστε να ζητάει πώς να ανακτήσετε την αρχικά εκτελεσμένη δέσμη ενεργειών αντί για την τρέχουσα δέσμη ενεργειών που εκτελείται. Ο μόνος (;;) αξιόπιστος τρόπος για να το κάνετε αυτό είναι να χρησιμοποιήσετε τη συνάρτηση debug_backtrace
.
$stack = debug_backtrace();
$firstFrame = $stack[count($stack) - 1];
$initialFile = $firstFrame['file'];
Παραδείγματα για: 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__;
Σημείωση!
DIRECTORY_SEPARATOR
επιστρέφει \
για φιλοξενία τύπου Windows, αντί για /
.<br/>,
//(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__));
Αν το τοποθετήσετε σε ένα συμπεριλαμβανόμενο αρχείο, εκτυπώνεται η διαδρομή προς αυτό το include. Για να λάβετε τη διαδρομή του γονικού σεναρίου, αντικαταστήστε το __FILE__
με το $_SERVER['PHP_SELF']
. Αλλά να γνωρίζετε ότι το PHP_SELF αποτελεί κίνδυνο για την ασφάλεια!