2011-03-10 18 views
14

Estoy en el proceso de transferir mi sitio web de un servidor a otro. Tengo algunos scripts php que usan la función is_readable que usa el directorio de trabajo actual.PHP: Cómo establecer el directorio de trabajo actual para que sea el mismo que el directorio que ejecuta el script

En el servidor anterior, cuando llamo a getcwd(), muestra la carpeta en la que se está ejecutando el script. En el nuevo servidor, emite el directorio raíz '/'.

Me gustaría saber cómo puedo configurar PHP para usar la carpeta actual en lugar de '/'. No quiero tener que cambiar ningún código PHP que ya funcione en el servidor anterior. Puedo configurar el nuevo servidor, pero no sé qué configuración cambiar. Estoy usando apache2, si eso ayuda.

EDITAR: Parece que mi directorio de trabajo no es root como pensaba. Cuando creo un testFile.php y el eco getcwd() que muestra el directorio del archivo PHP es. Pero en mi archivo del problema, en el mismo directorio, getcwd() se muestra como '/'

+0

Los dos servidores diferentes se están ejecutando diferentes versiones de php, ¿verdad? – klang

+1

Sí: El servidor antiguo usa 5.2. El nuevo servidor usa 5.3. – MF86

+0

Posible duplicado de [En PHP, la mejor manera de garantizar que el directorio actual de trabajo sea el mismo que el script, cuando se usa CLI] (http://stackoverflow.com/questions/192092/in-php-best-way-to-ensure-current -working-directory-is-same-as-script-when-us) –

Respuesta

19

chdir(__DIR__);

o

chdir(dirname(__FILE__));

(ver chdir y magic constants).

Pero eso debería ser por defecto.

+1

Gracias, pero ¿puedo poner esto en php.ini o algún archivo de configuración? No quiero editar mi código php existente. – MF86

+0

@ MF86 No puede ponerlo en su php.ini. Pero puedes ponerlo en archivos de configuración que están escritos como código PHP simple. (Por ejemplo, un archivo de configuración que contiene código como '

2

Puede obtener el directorio actual en el que se encuentra un script con dirname(__FILE__) o __DIR__ si> = PHP 5.3.

+0

+1 por no sugerir 'chdir', que puede tener efectos secundarios no deseados. Será mejor ajustar el script para que no le importe el directorio de trabajo actual que continuar el comportamiento posiblemente extraño. – Charles

+0

Me gustaría poder hacer esto sin cambiar los scripts existentes. En el servidor anterior, getcwd() devuelve el script actual que ejecuta el script. – MF86

+0

Si necesita que su código funcione en máquinas en las que no puede controlar la configuración, * necesitará * cambiar su código para simplemente no preocuparse por la configuración externa. '__DIR__' o' dirname (__ FILE __) 'garantiza que obtendrá el directorio en el que vive el archivo sin preocuparse por el cwd. – Charles

3

esto es normal en CLI mode:

No cambia el directorio de trabajo a la de la secuencia de comandos. (-C y --no-chdir interruptores mantienen por compatibilidad)

una solución rápida sería

chdir(dirname(__FILE__)); 
+0

Gracias. ¿Sabes cómo puedo cambiar de modo CLI? – MF86

+0

@ MF86 ¿por qué estás en esto en primer lugar? ¿Dónde se ejecuta tu secuencia de comandos? –

+0

No estoy seguro de que lo sea. Mi script se ejecuta en apache, en mi carpeta www. – MF86

Cuestiones relacionadas