In diversi ambienti server, il PHP $_SERVER['DOCUMENT_ROOT']super global a volte ha una barra finale e talvolta no. Avrei pensato che questo problema fosse direttamente correlato al modo in cui Apache DocumentRootè definito nel httpd.conffile:
cioè avrei pensato che se httpd.confnon contiene una barra finale:
<VirtualHost *:8880>
DocumentRoot /var/www/live/current
...
allora echo $_SERVER['DOCUMENT_ROOT']dovrebbe dare / var / www / live / current
e se httpd.confcontiene una barra finale:
<VirtualHost *:8880>
DocumentRoot /var/www/live/current/
...
allora echo $_SERVER['DOCUMENT_ROOT']dovrebbe dare / var / www / live / current /
Questo è il caso di Ubuntu 10.04 ma su RHEL 5.5 viene aggiunta una barra finale $_SERVER['DOCUMENT_ROOT']anche se nessuna è stata definita su Apache.
Qualche idea del perché accada questo? C'è un parametro di configurazione che mi manca?
Per riferimento:
- PHP 5.3.3 di RHEL (il problema si verifica): PHP 5.3.3 (cli) (costruito: 23 lug 2010 16:26:53)
- Versione PHP di Ubuntu (nessun problema): PHP 5.3.2-1ubuntu4.2 con Suhosin-Patch (cli) (costruito: 13 maggio 2010 20:03:45)
$realpath = realpath($_SERVER['DOCUMENT_ROOT']);. Rimuove automaticamente tutte le barre multiple e anche quella finale. Se si desidera sempre una barra finale concatenarla al risultato della chiamata precedenterealpath(). Non al suo interno.