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?

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top