¿Cómo se incluye un archivo que tiene más de 2 directorios atrás? Sé que puede usar ../index.php
para incluir un archivo que tiene 2 directorios atrás, pero ¿cómo lo hace para 3 directorios atrás? ¿Esto tiene sentido? Lo intenté .../index.php
pero no funciona.
Tengo un archivo /game/forum/files/index.php
y usa PHP include para incluir un archivo. Que se encuentra en /includes/boot.inc.php
; /
siendo el directorio raíz.
php
include
filesystems
hakre
fuente
fuente
Respuestas:
..
selecciona el directorio padre del actual. Por supuesto, esto se puede encadenar:Esto sería dos directorios arriba.
fuente
define
se usaría aquí, pero (1) esa no era ni remotamente la pregunta aquí. Y (2) todavía usaría una ruta relativa en sudefine
, a menos que realmente codifique toda la ruta absoluta del servidor y me abstendría de eso ya que solo tiene desventajas. O (la tercera alternativa) podría usar la manipulación de cadenas para extraer el directorio principal de la ruta actual (expandida), pero una vez más, esto no tiene ninguna ventaja en el uso de rutas relativas./../
puede funcionar o../
puede funcionar, o ninguno puede funcionar en tres computadoras diferentes con la misma configuración de entorno exacta../
y../../
(nota: ¡ sin barra inclinada!), Funciona en todos los sistemas operativos modernos. Se utiliza para que no funcione en Windows y ( siempre hace) Macintosh pero ahora trabaja en todas partes, y tiene por lo menos durante los últimos años diez. Si no funciona en algún lugar, entonces la razón es que la estructura del archivo es diferente y / o estás en un directorio de trabajo diferente. Pero no está relacionado con este código./../
lugar de../
en su entorno./../
simplemente no tiene sentido en ningún sistema (es equivalente a/
, o es un error). ¿Estás seguro de que no estás pegando algo delante?Para incluir un archivo en un directorio atrás, use
'../file'
. Para dos directorios hacia atrás, use'../../file'
. Y así.Aunque, de manera realista, no debería realizar inclusiones relativas al directorio actual. ¿Y si quisiera mover ese archivo? Todos los enlaces se romperían. Una forma de asegurarse de que aún puede vincular a otros archivos, mientras conserva esos vínculos si mueve su archivo, es:
DOCUMENT_ROOT
es una variable de servidor que representa el directorio base en el que se encuentra su código.fuente
Así
../
que le devuelve un directorio, no dos .Encadena
../
tantas veces como sea necesario para subir 2 o más niveles.fuente
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:
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:
En
parent.php
, poner:En
sub/included.php
, poner:Resultado al acceder
parent.php
:Como podemos ver, en el primer caso, la ruta se resuelve desde el script de llamada
parent.php
, mientras que al usar eldirname(__FILE__).'/path'
truco, la inclusión se realiza desde el scriptincluded.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:
De hecho, la anteposición
/
funcionará, pero se resolverá comoinclude ../../index.php
en el script de llamada (la diferencia es queinclude_path
no se revisará después si falla). Desde PHP doc :fuente
..
mitad de la ruta (relativa / absoluta)...
se usa en medio de la inclusión. siempre debe ser la primera parte de include../
es un directorio, se repite para dos directorios../../
o incluso para tres:../../../
y así sucesivamente.La definición de constantes puede reducir la confusión porque profundizará en directorios en lugar de hacia atrás.
Podría definir algunas constantes así:
Al usar 'BD' o mi 'directorio base', se ve así:
definir(); referencia
fuente
fuente
Cada instancia de
../
significa subir / bajar un directorio.fuente
Las siguientes son formas de acceder a sus diferentes directorios: -
fuente
Puede hacerlo
../../directory/file.txt
: esto retrocede dos directorios.../../../
- esto va a tres. etcfuente
fuente
Pero tenga MUCHO cuidado al permitir que un usuario seleccione el archivo. Realmente no desea permitirles obtener un archivo llamado, por ejemplo,
u otros archivos sensibles del sistema.
(Lo siento, ha pasado un tiempo desde que era un administrador de sistemas de Linux, y creo que este es un archivo confidencial, por lo que recuerdo)
fuente
fuente
Recomiendo usarlo
__DIR__
para especificar el directorio de archivos php actual . Consulta aquí el motivo.fuente
si está usando php7, puede usar la función dirname con el parámetro de nivel 2, por ejemplo:
el segundo parámetro "2" indica cuántos suben de nivel
referencia de nombre de directorio
fuente
incluyendo más de directorios puede ser procesado por archivo proxy
..... | _proxy.php
fuente
Prueba
../../
. Puede modificarlo en consecuencia, ya que lo llevará hacia atrás dos directorios. Primero acceda al directorio raíz y luego acceda al directorio requerido.Por ejemplo, está dentro
root/inc/usr/ap
y hay otro directorioroot/2nd/path
. Puede acceder alpath
directorio deap
esta manera:../../2nd/path
primero vaya a la raíz que el directorio deseado. Si no funciona, compártelo.fuente
si incluye el
/
al principio de la inclusión, la inclusión se tomará como la ruta desde la raíz del sitio.si su sitio es http://www.example.com/game/forum/files/index.php , puede agregar una inclusión a /includes/boot.inc.php que se resolvería en http://www.example.com /includes/boot.inc.php .
Debe tener cuidado con el
..
cruce ya que algunos servidores web lo tienen deshabilitado; también causa problemas cuando desea mover su sitio a una nueva máquina / host y la estructura es un poco diferente.fuente
Prueba esto
este ejemplo es un directorio atrás
este ejemplo es dos directorio atrás
fuente
Vi tus respuestas y usé incluir ruta con sintaxis
y el servidor http (Apache 2.4.3) devolvió el error interno 500.
Cuando cambié el camino a
todo esta bien.
fuente