2012-05-10 8 views
10

Tengo un script que está un enlace simbólico de una carpeta a otraobtener el directorio actual de script php symlink'd y no real script php

/var/www/default/index.php 

que es un enlace simbólico a

/var/www/mysite/index.php 

Sin embargo, cuando llame al DIR desde mysite, la ruta se resuelve en la ruta original de manera predeterminada. ¿Cómo puedo hacer que vuelva el camino mysite (la carpeta con el enlace simbólico, no la carpeta actual)

+0

Puede 'var_dump ($ _ SERVER)' para ver si alguna de las variables de ruta contiene la ruta en la que se encuentra n eeding. – drew010

Respuesta

13

Para Servidor Web solicita

nombredir ($ _ SERVER [ 'SCRIPT_FILENAME']) le dará lo que necesita. Si falla, $ _SERVER ['PHP_SELF'] o incluso REQUEST_URI lo tendrán.

Para CLI (línea de comandos)

esto no funcionará en CLI (línea de comandos) guiones como $ _SERVER se añade por el servidor web.

Afortunadamente es mucho más fácil con los scripts cli (ya que no hay un servidor web para meterse con cosas).

Todo lo que necesita es leer la línea de comandos que inició el script: http://php.net/manual/en/reserved.variables.argv.php. El primer argumento $ argv [0] es siempre el nombre que se usó para ejecutar el script.

+0

Gracias robbie por su sugerencia. Usando lo que dijiste, se me ocurrió esto que funcionó tanto para web como para cli. define ('ROOT', dirname ($ _ SERVER ['SCRIPT_FILENAME'])); –

+0

De nada. Gracias por confirmar que funcionó. – Robbie

+0

Buena solución, Robbie. ¿Podría corregir el error tipográfico en _dir_name_ (debería ser _dirname_) – Peter

0

Si está buscando la ruta completa del sistema sin resolver de un script cli, SCRIPT_PATH será insuficiente.

php -f symlink/script.php 

SCRIPT_FILENAME contendrá enlace simbólico/script.php

He creado un php/GIST que gets the unresolved path to the php file.

Aquí es el resultado de la función:

$ php -f subdir/mysymlink/subdir/mysymlink/subdir/mysymlink/app.php 
PWD: /tmp/phpcode                   
SCRIPT_FILENAME: subdir/mysymlink/subdir/mysymlink/subdir/mysymlink/app.php     
___FILE__ : /tmp/phpcode/app.php                
getSymlink(): /tmp/phpcode/subdir/mysymlink/subdir/mysymlink/subdir/mysymlink    
Cuestiones relacionadas