Em diferentes ambientes de servidor, o PHP $_SERVER['DOCUMENT_ROOT']
super global às vezes tem uma barra final e às vezes não. Eu pensaria que esse problema está diretamente relacionado à forma como o Apache DocumentRoot
é definido no httpd.conf
arquivo:
ou seja, eu teria pensado que, se httpd.conf
não contém barra:
<VirtualHost *:8880>
DocumentRoot /var/www/live/current
...
então echo $_SERVER['DOCUMENT_ROOT']
deve dar / var / www / live / current
e se httpd.conf
contém uma barra à direita:
<VirtualHost *:8880>
DocumentRoot /var/www/live/current/
...
então echo $_SERVER['DOCUMENT_ROOT']
deve dar / var / www / live / current /
É o caso do Ubuntu 10.04, mas no RHEL 5.5 uma barra final é adicionada ao $_SERVER['DOCUMENT_ROOT']
mesmo que nenhuma tenha sido definida no Apache.
Alguma idéia de por que isso acontece? Existe um parâmetro de configuração que estou ausente?
Para referência:
- PHP 5.3.3 do RHEL (ocorre um problema): PHP 5.3.3 (cli) (compilado: 23 de julho de 2010 16:26:53)
- Versão PHP do Ubuntu (sem problemas): PHP 5.3.2-1ubuntu4.2 com Suhosin-Patch (cli) (compilado: 13 de maio de 2010 20:03:45)
$realpath = realpath($_SERVER['DOCUMENT_ROOT']);
. Ele remove automaticamente todas as várias barras e também a barra final. Se você sempre deseja uma barra final, concatene-a com o resultado da chamada acimarealpath()
. Não dentro dele.