2011-09-05 25 views
10

Hasta donde yo sé, se supone que php getcwd() (y funciones similares, por ejemplo dirname(__FILE__)) devuelven el directorio actual del archivo que se está ejecutando.php getcwd() resolviendo el destino del enlace simbólico en lugar del directorio actual

Si el directorio actual pasa a ser un enlace simbólico a otro directorio, php (presumiblemente en conjunto con Apache) se supone que devolver la ruta que muestra el nombre del enlace simbólico como el 'directorio' que se encuentra.

Ejemplo :

from /var/www, 
directory 'one' contains index.php 
symlink 'two' points at directory 'one' 

one/index.php: <?php echo getcwd(); ?> 

Acceso http://localhost/two/index.php en un navegador muestra /var/www/one.

Yo esperaría que muestran /var/www/two

¿Alguien sabe si esto es un PHP o Apache ajuste puedo cambiar? ¿O no puedo usar los enlaces simbólicos de esta manera?

+1

¿Lo descubrió? Estoy interesado en este mismo caso de uso. – kalenjordan

+0

¿Apache está configurado para seguir a symLinks? Me gusta 'Options FollowSymLinks' –

+0

No creo que esto tenga nada que ver con Apache. Es una "característica" de PHP. Si ingresa esto en la línea de comando 'mkdir a; ln -s a b; php -r 'chdir ("b"); echo getcwd(); '', php te mostrará que estás en un directorio llamado' a ', aunque chdir() ed a' b '. – edam

Respuesta

8

OK lo resolvió. Use $_SERVER['SCRIPT_FILENAME'] si está sobre el navegador. En la línea de comandos, puede obtener el directorio enlazado actual usando exec("pwd")

Cuestiones relacionadas