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, forzará que el include sea siempre en relación con la posición del script actual donde se coloca este código (qué ubicación es más probable estable, ya que define la arquitectura de su aplicación). Esto es diferente de simplemente hacer include '../../index.php'
which will include relatively to the executing (also named "calling") script and then relatively to the current working directory, que apuntará al script principal que incluye el script, en lugar de resolver desde la ruta del script incluido.
De la documentación de PHP:
archivos están incluidos en base a la ruta del archivo determinado o, si no se da ninguno, include_path especificado. Si el archivo no se encuentra en el include_path, include finalmente comprobará en el directorio del script de llamada y en el directorio de trabajo actual antes de fallar.
Y la publicación más antigua que encontré citando este truco dates back to 2003, by Tapken.
Puede probar con la siguiente configuración:
crear 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 cuando se accede a parent.php
:
WRONG : X:\htdocs\goal.php
GOOD : X:\htdocs\sub\goal.php
Como podemos ver, en el primer caso, el camino se resuelve a partir de la secuencia de comandos que llama parent.php
, mientras que utilizando el truco dirname(__FILE__).'/path'
, el include se hace desde el guión included.php
donde el código se coloca en
Cuidado, el equivalente a no seguir el truco anterior al contrario de lo que se puede leer en otra parte:.
include '/../../index.php';
de hecho, pre pendiente /
funcionará, pero se resolverá igual que include ../../index.php
desde el script de llamada (la diferencia es que include_path
no se examinará después si falla). From PHP doc:
Si se define un camino - 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 será ignorado por completo.
es más como PHP, HTML ... no – kender