PHP: Come ottenere la radice del documento dall'interno di una directory utente?
-
08-10-2019 - |
Domanda
I sviluppare e distribuire le varie applicazioni PHP per ambienti diversi. Soprattutto su ambienti di sviluppo, possono essere ovunque, da document_root a / Users / me / Siti / o / Users / me / Siti / someapp /
All'interno di queste applicazioni Ho bisogno di sapere dove il 'principale dell'applicazione' è, una volta come il percorso reale e una volta come URL. Percorso non è un problema. Diciamo che ho un bootstrap.php nella directory principale applicazione che fa:
define("BASE_DIR", realpath(dirname(__FILE__)));
Tuttavia, ho dei problemi per ottenere in modo affidabile l'URL di base. Sulla maggior parte degli ambienti semplicemente sottraendo radice del documento da BASE_DIR funziona:
define("BASE_URL", str_replace($_SERVER['DOCUMENT_ROOT'],'',BASE_DIR) . "/");
Ora, il mio problema è il seguente: Questo non funziona in ambienti in cui le mie bugie app dentro la mia directory utente perché PHP vede ancora la radice del documento principale. Qualcuno ha risolto questo problema?
Soluzione
Tutto ciò che coinvolge realpath () e DOCUMENT_ROOT sta per fallire duro quando gli alias ottenuto del server configurati. Si consideri uno scenario in cui Apache ha un configurazione come questa:
DocumentRoot /home/httpd/html
Alias /testalias /home/otherdir
E si accede uno script 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/
e tuttavia il resto del sito esiste realmente in /home/httpd/html
Si potrebbe avere più fortuna ricostruire l'URL in base a $_SERVER['SCRIPT_NAME']
, che è la parte del nome percorso / script del URL:
$_SERVER['SCRIPT_NAME'] -> /testalias/script.php