La respuesta aceptada de Pekka es incompleta y, en un contexto general, engañosa. Si el archivo se proporciona como una ruta relativa, la construcción del lenguaje llamado include
lo buscará de la siguiente manera.
Primero, pasará por las rutas de la variable de entorno include_path
, que se puede configurar con ini_set
. Si esto falla, buscará en el directorio del script de llamada dirname(__FILE__)
( __DIR__
con php> = 5.3.) Si esto también falla, ¡solo entonces buscará en el directorio de trabajo! Resulta que, de forma predeterminada, la variable de entorno include_path
comienza con .
, que es el directorio de trabajo actual. Esa es la única razón por la que busca primero en el directorio de trabajo actual. Consulte http://php.net/manual/en/function.include.php .
Los archivos se incluyen en función de la ruta del archivo proporcionada o, si no se proporciona, la ruta_incluida especificada. Si el archivo no se encuentra en include_path, include finalmente verificará el directorio propio del script de llamada y el directorio de trabajo actual antes de fallar.
Entonces, la respuesta correcta a la primera parte de la pregunta es que sí importa dónde se encuentra el script de llamada incluido. La respuesta a la última parte de la pregunta es que el directorio de trabajo inicial , en un contexto de servidor web, es el directorio del script llamado, el script que incluye todos los demás mientras es manejado por PHP. En un contexto de línea de comandos, el directorio de trabajo inicial es lo que sea cuando se invoca php en el indicador, no necesariamente el directorio donde se encuentra el script llamado. El actual directorio de trabajo, sin embargo, se puede cambiar en tiempo de ejecución con la función de PHP chdir
. Consulte http://php.net/manual/en/function.chdir.php .
Este párrafo se agrega para comentar otras respuestas. Algunos han mencionado que confiar en include_path
es menos robusto y, por lo tanto, es preferible utilizar rutas completas como ./path
o __DIR__ . /path
. Algunos fueron tan lejos como para decir que confiar en el directorio de trabajo en .
sí no es seguro, porque se puede cambiar. Sin embargo, algunas veces, debe confiar en los valores del entorno. Por ejemplo, es posible que desee establecerlo include_path
vacío, de modo que el directorio del script de llamada sea el primer lugar en el que buscará, incluso antes del directorio de trabajo actual. Es posible que el código ya esté escrito y actualizado periódicamente desde fuentes externas y no desea volver a insertar el prefijo __DIR__
cada vez que se actualice el código.