PHP: Come get la radice del documento da una directory utente?

Sviluppo e distribuisco varie applicazioni PHP in diversi ambienti. Soprattutto negli ambienti di sviluppo, possono essere ovunque, da document_root a / Users / me / Sites / o anche / Users / me / Sites / someapp /

All'interno di queste applicazioni ho bisogno di sapere where si trova la 'root dell'applicazione', una volta come il vero path e una volta come URL. Il path non è un problema. Diciamo che ho un bootstrap.php nella directory root dell'app che fa:

define("BASE_DIR", realpath(dirname(__FILE__))); 

Tuttavia, ho problemi ad get in modo affidabile l'URL di base. Nella maggior parte degli ambienti, semplicemente sottraendo la radice del documento da BASE_DIR funziona:

 define("BASE_URL", str_replace($_SERVER['DOCUMENT_ROOT'],'',BASE_DIR) . "/"); 

Ora, il mio problema è: questo non funziona su ambienti in cui la mia app si trova nella mia directory utente perché PHP vede ancora la radice del documento principale. Qualcuno ha risolto questo problema?

Qualsiasi cosa che coinvolge realpath () e DOCUMENT_ROOT sta per fallire quando il server ha gli alias configurati. Considera uno scenario in cui Apache ha una configuration come questa:

 DocumentRoot /home/httpd/html Alias /testalias /home/otherdir 

E accedi a uno script su example.com/testalias/script.php .

Lo script restituirà:

 realpath(dirname(__FILE__)) -> /home/otherdir $_SERVER['DOCUMENT_ROOT'] -> /home/httpd/html BASE_DIR -> /home/otherdir BASE_URL -> /home/otherdir/ 

eppure il resto del sito esiste in /home/httpd/html

Potresti avere una migliore fortuna nel ribuild l'URL in base a $_SERVER['SCRIPT_NAME'] , che è la parte del path / nome script dell'URL:

 $_SERVER['SCRIPT_NAME'] -> /testalias/script.php