include dirname(__FILE__).'/../../index.php';
es su mejor opción aquí, y evitará la mayoría de los errores de ruta relativos que puede encontrar con otras soluciones.
De hecho, obligará a que la inclusión sea siempre relativa a la posición del script actual donde se coloca este código (qué ubicación es más probable que sea estable, ya que usted define la arquitectura de su aplicación). Esto es diferente de simplemente hacer include '../../index.php'
lo que incluirá relativamente al script de ejecución (también llamado "llamando") y luego al directorio de trabajo actual , que apuntará al script principal que incluye su script, en lugar de resolver desde la ruta del script incluido .
De la documentación de 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.
Y la publicación más antigua que encontré citando este truco se remonta a 2003, por Tapken .
Puede probar con la siguiente configuración:
Crea un diseño como este:
htdocs
¦ parent.php
¦ goal.php
¦
+---sub
¦ included.php
¦ goal.php
En parent.php
, poner:
<?php
include dirname(__FILE__).'/sub/included.php';
?>
En sub/included.php
, poner:
<?php
print("WRONG : " . realpath('goal.php'));
print("GOOD : " . realpath(dirname(__FILE__).'/goal.php'));
?>
Resultado al acceder parent.php
:
WRONG : X:\htdocs\goal.php
GOOD : X:\htdocs\sub\goal.php
Como podemos ver, en el primer caso, la ruta se resuelve desde el script de llamada parent.php
, mientras que al usar el dirname(__FILE__).'/path'
truco, la inclusión se realiza desde el script included.php
donde se coloca el código.
Tenga cuidado, lo siguiente NO es equivalente al truco anterior al contrario de lo que se puede leer en otra parte:
include '/../../index.php';
De hecho, la anteposición /
funcionará, pero se resolverá como include ../../index.php
en el script de llamada (la diferencia es que include_path
no se revisará después si falla). Desde PHP doc :
Si se define una ruta, ya sea absoluta (comenzando con una letra de unidad o \ en Windows, o / en sistemas Unix / Linux) o relativa al directorio actual (comenzando con. O ..) - include_path se ignorará por completo.