2011-12-29 21 views
70

Tengo esta estructura de carpetas en mi proyecto PHP. (esto es como se muestra en eclipses)Obtener directorio raíz Ruta de un proyecto PHP

-MySystem 
    +Code 
    +Data_Access 
    -Public_HTML 
     +css 
     +js 
     +Templates 
    -resources 

Cuando intento este código

echo $_SERVER['DOCUMENT_ROOT'] 

salida es

D:/espacio de trabajo

¿Cómo puedo conseguir la ruta a RootDirectory del sistema (MySystem), sin h ¿Codificando el nombre de la carpeta?

Respuesta

106

Para PHP> = 5.3.0 tratar

PHP magic constants.

__DIR__ 

Y haga su camino relativamente.

Para PHP 5.3.0 < tratar

dirname(__FILE__) 
+3

esto es simplemente increíble, probé $ _SERVER ['DOCUMENT_ROOT'], dirname(), $ _SERVER ['SCRIPT_NAME'] etc. pero esto funcionó de manera excelente. – webblover

+29

Depende de dónde use '__DIR__'. Es relativo al archivo en sí, así que si en una inclusión, dentro de un subdirectorio, no devolverá solo su directorio raíz. – Iris

+0

No dará el directorio raíz – inrsaurabh

3

que puede probar: $ _SERVER [ 'PATH_TRANSLATED']

cita:

Filesystem- (no la raíz de documentos) ruta al script actual, después de que el servidor ha hecho cualquier mapeo virtual a real. Nota: A partir de PHP 4.3.2, PATH_TRANSLATED ya no se establece implícitamente en el Apache 2 SAPI en contraste con la situación en Apache 1, donde se establece en el mismo valor que la variable de servidor SCRIPT_FILENAME cuando no está poblado por Apache . Este cambio se realizó para cumplir con la especificación CGI de que PATH_TRANSLATED solo debería existir si PATH_INFO está definido. Los usuarios de Apache 2 pueden usar AcceptPathInfo = On dentro de httpd.conf para definir PATH_INFO.

fuente: php.net/manual

41

Cuando dice que

$_SERVER['DOCUMENT_ROOT'] 

contiene esta ruta:

D:/workspace 

Entonces D: es lo que busca ¿No es así? En ese caso se podría explotar la cadena por barras y devolver la primera de ellas: el directorio raíz del servidor

$pathInPieces = explode('/', $_SERVER['DOCUMENT_ROOT']); 
echo $pathInPieces[0]; 

Esta es la salida.

Actualización: Cuando se utiliza la constante DIRECTORY_SEPARATOR en lugar de la barra codificada ('/') este código también está trabajando en Windows.

Actualización 2: La variable global$_SERVER no siempre está disponible. En línea de comando (cli) por ejemplo. Por lo tanto, debe usar __DIR__ en lugar de $_SERVER['DOCUMENT_ROOT']. __DIR__ devuelve la ruta del archivo php.

+2

Y podría usar '__DIR__' en lugar de' $ _SERVER ['DOCUMENT_ROOT'] '. – Armin

+0

Lo siento si no he explicado mi pregunta correctamente, Lo que realmente necesito es 'D:/workspace/MySystem' – Nalaka526

+0

si su ruta de directorio raíz está en la forma de/var/public/www "y luego usando este método la primera cadena en la matriz estará vacía (0)/(1)/(2)/(3). La raíz será la segunda cadena $ pathInPieces [1] – tbradley22

22

utilizar la función de PHP:

getcwd()

Obtiene el directorio de trabajo actual.

1
echo $pathInPieces = explode(DIRECTORY_SEPARATOR , __FILE__); 
echo $pathInPieces[0].DIRECTORY_SEPARATOR; 
4

quiero señalar a la forma en Wordpress maneja esto:

define('ABSPATH', dirname(dirname(__FILE__)) . '/'); 

como WordPress se utiliza muy pesado en toda la web y también funciona bien localmente Tengo mucha confianza en este método.

Cuestiones relacionadas