validar validacion txt tipo subir reemplazar guardar como archivos archivo adjuntar php include filesystems

php - validacion - ¿Cómo incluyo un archivo de más de 2 directorios?



upload de archivos en php (18)

¿Cómo se incluye un archivo de más de 2 directorios? Sé que puedes usar ../index.php para incluir un archivo que tenga 2 directorios atrás, pero ¿cómo lo haces para 3 directorios? ¿Esto tiene sentido? Intenté .../index.php pero no está funcionando.

Tengo un archivo en /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.


Intenta ../../ . Puede modificarlo en consecuencia, ya que lo llevará de vuelta a dos directorios. Primero, acceda al directorio raíz y luego acceda al directorio requerido.

Por ejemplo, está en root/inc/usr/ap y hay otro directorio root/2nd/path . Puede acceder al directorio de la path acceso de una manera similar: ../../2nd/path primero vaya a la raíz del directorio deseado. Si no funciona, comparte.


Las siguientes son formas de acceder a sus diferentes directorios:

./ = Your current directory ../ = One directory lower ../../ = Two directories lower ../../../ = Three directories lower


Para incluir un archivo de un directorio atrás, use ''../file'' . Para dos directorios atrás, use ''../../file'' . Y así.

Aunque, de manera realista, no debería realizar la función relativa al directorio actual. ¿Qué pasa si quieres mover ese archivo? Todos los enlaces se romperían. Una forma de asegurarse de que todavía puede vincular a otros archivos, conservando esos enlaces si mueve su archivo, es:

require_once($_SERVER[''DOCUMENT_ROOT''] . ''directory/directory/file'');

DOCUMENT_ROOT es una variable de servidor que representa el directorio base en el que se encuentra el código.


Pero tenga MUCHO cuidado al permitir que un usuario seleccione el archivo. Realmente no desea permitirles que obtengan un archivo llamado, por ejemplo,

../../../../../../../../../../etc/passwd

u otros archivos sensibles del sistema.

(Lo siento, ha pasado un tiempo desde que era administrador de sistemas de Linux, y creo que este es un archivo confidencial, por lo que recuerdo)


Puede hacer ../../directory/file.txt - Esto hace dos directorios atrás.

../../../ - esto va tres. etc


Recomiendo usar __DIR__ para especificar el directorio actual de archivos php . Mira here por la razón.

__DIR__ . /../../index.php


Vi tus respuestas y utilicé include path con sintaxis

require_once ''../file.php''; // server internal error 500

y el servidor http (Apache 2.4.3) devolvió el error interno 500.

Cuando cambié el camino a

require_once ''/../file.php''; // OK

todo esta bien.


incluso sobre directorios pueden procesarse por archivo proxy

  • raíz
  • ..... | __web
  • ..... | ......... | _requiredDbSettings.php
  • ..... |
  • ..... | ___ db
  • ..... | ......... | _dbsettings.php
  • ..... |
  • ..... | _proxy.php

    dbsettings.php: $host=''localhost''; $user=''username'': $pass=''pass''; proxy.php: include_once ''db/dbsettings.php requiredDbSettings.php: include_once ''./../proxy.php'';


si está utilizando php7 puede usar la función dirname con parámetro de nivel de 2, por ejemplo:

dirname("/usr/local/lib", 2);

el segundo parámetro "2" indica cuántos niveles suben

dirname referance


si incluye / al comienzo de include, 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 .

Tienes que tener cuidado con .. atravesarlo ya que algunos servidores web lo tienen desactivado; también causa problemas cuando desea mover su sitio a una nueva máquina / host y la estructura es un poco diferente.


../ es un directorio, Repita para dos directorios ../../ o incluso tres: ../../../ y así sucesivamente.

La definición de constantes puede reducir la confusión porque se profundizará en los directorios, los versículos en sentido inverso

Podrías definir algunas constantes así:

define(''BD'', ''/home/user/public_html/example/''); define(''HTMLBD'', ''http://example.com/'');

Cuando uso ''BD'' o mi ''directorio base'' se ve así:

file(BD.''location/of/file.php'');

definir(); referencia


.. selecciona el directorio padre del actual. Por supuesto, esto puede estar encadenado:

../../index.php

Esto sería dos directorios arriba.


. = current directory .. = parent directory

Así que ... le devuelve un directorio no dos .

Cadena ../ tantas veces como sea necesario para subir 2 o más niveles.


../../../includes/boot.inc.php


../../../includes/boot.inc.php

Cada instancia de ../ significa subir / retroceder un directorio.


../../../index.php


../../index.php


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 la inclusión a ser siempre relativa a la posición de la secuencia de comandos 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 solo hacer include ''../../index.php'' que incluirá relativamente a la secuencia de comandos de ejecución (también llamada "llamada") y, luego, relativamente al directorio de trabajo actual , que apuntará al script primario que incluye su secuencia de comandos, en lugar de resolver desde la ruta de su 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 ninguno, se especifica la ruta de acceso include. Si el archivo no se encuentra en include_path, include finalmente comprobará en el propio directorio del script de llamada y en el directorio de trabajo actual antes de fallar.

Y el post más antiguo que encontré citando este truco data de 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 , pon:

<?php include dirname(__FILE__).''/sub/included.php''; ?>

En sub/included.php , pon:

<?php print("WRONG : " . realpath(''goal.php'')); print("GOOD : " . realpath(dirname(__FILE__).''/goal.php'')); ?>

Resultado al acceder a 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 con el truco dirname(__FILE__).''/path'' , la inclusión se hace desde el script included.php donde el código se coloca en.

Tenga cuidado, el siguiente NO es equivalente al truco anterior contrario a lo que se puede leer en otra parte:

include ''/../../index.php'';

De hecho, antepender / funcionará, pero se resolverá al igual que include ../../index.php del script de llamada (la diferencia es que include_path no se examinará después si falla). De doc PHP :

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.