Λήψη της απόλυτης διαδρομής της τρέχουσας δέσμης ενεργειών

Έχω ψάξει πολύ και έχω πάρει πολλές διαφορετικές λύσεις και μεταβλητές που περιέχουν πληροφορίες για να λάβω την απόλυτη διαδρομή. Φαίνεται όμως ότι λειτουργούν κάτω από ορισμένες συνθήκες και όχι κάτω από άλλες. Υπάρχει ένας αποτελεσματικός τρόπος για να λάβω την απόλυτη διαδρομή του εκτελούμενου σεναρίου στην PHP; Για μένα, το σενάριο θα εκτελεστεί από τη γραμμή εντολών, αλλά, μια λύση θα πρέπει να λειτουργεί εξίσου καλά αν εκτελεστεί μέσα στον Apache κ.λπ.

Διευκρίνιση: Το αρχικά εκτελεσμένο σενάριο, όχι απαραίτητα το αρχείο στο οποίο είναι κωδικοποιημένη η λύση .

Η σταθερά __FILE__ θα σας δώσει την απόλυτη διαδρομή προς το τρέχον αρχείο.

Ανανέωση:

Η ερώτηση άλλαξε ώστε να ζητάει πώς να ανακτήσετε την αρχικά εκτελεσμένη δέσμη ενεργειών αντί για την τρέχουσα δέσμη ενεργειών που εκτελείται. Ο μόνος (;;) αξιόπιστος τρόπος για να το κάνετε αυτό είναι να χρησιμοποιήσετε τη συνάρτηση debug_backtrace.

$stack = debug_backtrace();
$firstFrame = $stack[count($stack) - 1];
$initialFile = $firstFrame['file'];
Σχόλια (16)

Παραδείγματα για: 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__;

Σημείωση!

  • Τα μέρη URL με hashtag (#...) δεν μπορούν να εντοπιστούν από την PHP (από την πλευρά του διακομιστή). Για αυτό, χρησιμοποιήστε JavaScript.
  • Το DIRECTORY_SEPARATOR επιστρέφει \ για φιλοξενία τύπου Windows, αντί για /.
Σχόλια (2)
echo realpath(dirname(__FILE__));

Αν το τοποθετήσετε σε ένα συμπεριλαμβανόμενο αρχείο, εκτυπώνεται η διαδρομή προς αυτό το include. Για να λάβετε τη διαδρομή του γονικού σεναρίου, αντικαταστήστε το __FILE__ με το $_SERVER['PHP_SELF']. Αλλά να γνωρίζετε ότι το PHP_SELF αποτελεί κίνδυνο για την ασφάλεια!

Σχόλια (12)