En diferentes entornos de servidor, el $_SERVER['DOCUMENT_ROOT']
súper global de PHP a veces tiene una barra diagonal final y otras no. Pensé que este problema está directamente relacionado con cómo DocumentRoot
se define Apache en el httpd.conf
archivo:
es decir, habría pensado que si httpd.conf
no contiene una barra diagonal final:
<VirtualHost *:8880>
DocumentRoot /var/www/live/current
...
entonces echo $_SERVER['DOCUMENT_ROOT']
debería dar / var / www / live / current
y si httpd.conf
contiene una barra inclinada final:
<VirtualHost *:8880>
DocumentRoot /var/www/live/current/
...
entonces echo $_SERVER['DOCUMENT_ROOT']
debería dar / var / www / live / current /
Este es el caso en Ubuntu 10.04 pero en RHEL 5.5 se agrega una barra inclinada, $_SERVER['DOCUMENT_ROOT']
incluso si no se definió ninguno en Apache.
¿Alguna idea de por qué sucede esto? ¿Hay un parámetro de configuración que me falta?
Para referencia:
- PHP 5.3.3 de RHEL (se produce un problema): PHP 5.3.3 (cli) (construido: 23 de julio de 2010 16:26:53)
- Versión PHP de Ubuntu (sin problemas): PHP 5.3.2-1ubuntu4.2 con Suhosin-Patch (cli) (construido: 13 de mayo de 2010 20:03:45)
$realpath = realpath($_SERVER['DOCUMENT_ROOT']);
. Elimina automáticamente todas las barras múltiples y también la final. Si siempre desea una barra inclinada final, coníquela al resultado de la llamada anterior arealpath()
. No dentro de ella.rtrim($_SERVER['DOCUMENT_ROOT'],'/\\').'/'
debería ser un poco más rápido que todas esas cosas que Realpath puede hacer.http://httpd.apache.org/docs/2.0/mod/core.html dice: DocumentRoot debe especificarse sin una barra diagonal final.
fuente
La raíz del documento en un entorno Apache se puede definir en más de un lugar.
Sí,
httpd.conf
contiene estas configuraciones, pero se pueden sobrescribir ya que este archivo se usa para la configuración predeterminada.Te sugiero que revises la configuración de vhost en
vhosts.d
ysites-available
directorios.fuente
La solución propuesta:
no funciona en todas las instalaciones.
Por ejemplo, en mi caso:
El mismo problema que antes.
Es posible que deba modificar la primera instrucción en:
cardo
fuente
rtrim($_SERVER['DOCUMENT_ROOT'],'/\\').'/'
debería ser un poco más rápido que todas esas cosas que Realpath puede hacer.La respuesta de Dom es una solución a este problema, sin embargo, la declaración de stefanvesca es la razón por la cual en los diferentes entornos experimenta el doble '//'. En su máquina local, dentro de su archivo .conf donde configuró su host virtual, probablemente agregó el / al final de la raíz del documento definido, mientras que la persona que configuró su otro entorno no lo hizo, o viceversa.
De todos modos, cuando se usa $ _SERVER ['DOCUMENT_ROOT'] de php se obtiene el valor del entorno apache que es el resultado de la configuración. Esa es la razón de la '/' en un entorno y '//' en otro.
fuente
Diría que se supone que DOCUMENT_ROOT no tiene una barra diagonal final.
Este valor se pasa de la configuración del servidor web
apache
DocumentRoot /var/www/html
Eso implica que deberíamos tener una barra diagonal al camino que le agreguemos.
Sabiendo que una barra doble '//' en cualquier parte de la ruta no tiene consecuencias (cuando se relaciona con el sistema de archivos ... en una URL http, podría haber casos en los que haya algunos problemas técnicos)
$ cat /etc//issue Debian GNU/Linux 9 \n \l
Cuando hay una barra inclinada final a DOCUMENT_ROOT, podemos culpar a sysadmin de algo que no tiene consecuencias :)
Y con seguridad ignorarlo?
fuente