2009-06-23 6 views
11

Si tengo un archivo index.php que incluye inc/footer.php que iba a escribir:php includes ¿hay alguna manera de incluir un archivo relativo solo a ese documento?

include 'inc/footer.php'; 

Si quiero incluir otro archivo dentro footer.php, debo hacerlo en relación con el index.php archivo (el que lo está incluyendo). Esto puede no ser un problema, pero ¿qué pasa si quiero incluir index.php desde una ubicación completamente diferente?

Entiendo que hay varios métodos para lograr esto, como definir una ruta absoluta o usar dirname (ARCHIVO).

Esto es algo que nunca ha sido un problema real, ya que de una forma u otra siempre lo descubrí, pero siempre me pregunté cómo funciona exactamente en php.

¿Alguien me puede explicar exactamente qué está pasando debajo del capó?

Gracias

Respuesta

31

Esto puede ayudar a: (a partir de http://php.net/manual/en/function.include.php)

archivos para incluir son atendidos primero en cada entrada include_path relación a la corriente de trabajo directorio y, a continuación, en el directorio de la secuencia de comandos actual. P.ej. si su include_path es librerías, el directorio actual de trabajo es/www /, usted incluido include/a.php y hay incluye "b.php" en ese archivo, b.php se buscó por primera vez en/www/libraries/ y luego en/www/include /. Si el nombre de archivo comienza con ./ o ../, se veía porque sólo en la corriente directorio de trabajo o el padre de la corriente directorio de trabajo, respectivamente

Sus estados de interrogación:

Si deseo incluir otro archivo dentro de footer.php, debo hacerlo relativo al archivo index.php (el que lo está incluyendo).

Esto es cierto sólo si la ruta de archivo que está intentando include() comienza con ./ o ../. Si es necesario incluir un archivo sobre el archivo actual utilizando una ruta relativa, puede (como usted sugiere) utilizar:

include(dirname(__FILE__) . '/../file.php') 

Si se define una ruta absoluta, también se puede añadir esto a la actual include_path:

set_include_path(get_include_path() . PATH_SEPARATOR . '/absolute/path'); 

a continuación, puede hacer todas sus incluye en relación con '/ ruta/absoluta /'.

-2

El mejor lugar para encontrar la respuesta está en el manual de PHP.

http://php.net/manual/en/function.include.php

Respuesta corta: la ruta es relativa a la ejecución del script PHP sin la sub incluye.

Establecer una ruta global absoluta a sus funciones, carpetas de clases etc. es el mejor método.

+0

¿Es mejor establecerlo con un definir o cambiar el archivo ini? – 0plus1

+1

Me refiero a establecerlo como una definición. p. define ('CLASS_DIR', '/ path/to/classes /'); –

Cuestiones relacionadas