Directorio PHP más alto

Siento molestarte por algo tan trivial. No puedo formular la pregunta correctamente para obtener un resultado en cualquier barra de búsqueda, probé Google y aquí, pero no obtuve respuestas relacionadas.

Actualmente estoy configurando una declaración de inclusión, y los archivos PHP de diferentes carpetas deben incluir los mismos archivos, a saber, "(Directorio superior) /public_html/Include/Head.php".

No estoy seguro de cómo decirle a PHP que busque public_html en el directorio superior. Originalmente pensé que para eso era "..", pero parece comportarse de manera extraña. ¿Alguien puede explicarme?

Esto es lo que estoy usando:

<?php include("../public_html/Include/Head.php") ?>

Además, incluir es una carpeta donde coloco todos los archivos que los usuarios generalmente no necesitan ver, principalmente para sacarlos del camino y hacer que mi carpeta principal sea menos desordenada.

preguntado el 16 de mayo de 11 a las 16:05

.. simplemente sube un nivel en el árbol de directorios. Para su muestra, si está en /x/y/z, entonces la inclusión buscará /x/y/Include/Header.php -

¿Podrías usar .. más de una vez en un enlace? Tal como ../../Include? -

Sí, aunque en algún momento llegará a la parte superior del sistema de archivos y luego a cualquier ../ será ignorado. -

4 Respuestas

Puede anteponer la raíz del documento para que tenga un punto de partida consistente y no tenga que preocuparse por atravesar en su caso particular, por ejemplo,

include($_SERVER['DOCUMENT_ROOT'].'/Include/Head.php')

o, para una solución para toda la aplicación, simplemente puede agregar Include a su ruta de inclusión:

set_include_path(get_include_path() . PATH_SEPARATOR . $_SERVER['DOCUMENT_ROOT'].'/Include');

http://php.net/manual/en/function.set-include-path.php

contestado el 16 de mayo de 11 a las 20:05

Recibo este error del método Document_Root: Warning: include() [function.include]: open_basedir restriction in effect. File (/usr/local/apache/htdocs/public_html/Include/SQLFunctions.php) is not within the allowed path(s): (/home/:/usr/lib/php:/tmp) in /home/a7077395/public_html/Include/Head.php on line 2. No estoy del todo seguro de lo que significa ser perfectamente honesto. Si ayuda, sé que este es Document_Root: /usr/local/apache/htdocs, y este es el include_path: .:/usr/lib/php:/usr/local/lib/php - Ashley Davies

Definitivamente comuníquese con su empresa de alojamiento web para ver por qué este es el caso. Deben estar configurando una raíz de documento correcta para usted en su configuración de VirtualHost. De su advertencia, su doc ​​root parece ser /home/a7077395/public_html. Si no pueden configurarlo así en el archivo de configuración, simplemente cree un DOC_ROOT definir y configurarlo en /home/a7077395/public_html y usar eso en lugar de $_SERVER['DOCUMENT_ROOT'] y / o colóquelo en su ruta de inclusión. - webbiedave

Defina alguna constante global: define('TOP_DIR', '/www/') luego úsalo en todas tus inclusiones:

include(TOP_DIR.'public_html/Include/Head.php');

Pon eso define() en algún lugar de fácil acceso e inclúyalo en cualquier página que necesite. Esto se vuelve mucho más simple si usa un marco que siempre tiene un único punto de entrada como CodeIgniter. Luego, puede tener un archivo de constantes y configuraciones que incluya en su archivo de punto de entrada y sabrá que esas cosas siempre estarán disponibles.

contestado el 16 de mayo de 11 a las 20:05

Gracias, asumí que habría una forma de obtener el directorio superior sin usar un método como este, pero si no, esto parece lo mejor. - Ashley Davies

La solución de @Ashley Davies webbiedave también es bastante buena, es solo una forma diferente de llegar a la raíz del documento de manera efectiva. Las rutas completas siempre lo tratarán mejor que las rutas relativas y serán mucho más fáciles de depurar cuando algo falla. Mi solución es de aplicación más general cuando comienza a trabajar con bibliotecas fuera de la raíz de su documento. - Endófago

La importación de archivos de PHP es un poco extraña, si desea importar en relación con el archivo que desea, use esto en su lugar:

<?php include(dirname(__FILE__) . "../Include/Head.php") ?>

La razón es que si tiene un archivo en (Top directory)/public_html/myfile.php que incluye este archivo, las inclusiones relativas serán relativas a myfile.php y no el archivo incluido.

contestado el 16 de mayo de 11 a las 20:05

Hay varias cosas que afectan lo que está tratando de lograr.

Primero, caminos absolutos y relativos. Cada vez que ve atajos de navegación de directorio en una ruta, está trabajando con una ruta relativa. .. significa ir up un directorio, o al directorio principal.

En segundo lugar, puede aplicarse el concepto de enraizamiento o chrooting. Dependiendo de su sistema, el directorio superior / (o \) puede o no ser el lugar desde donde está sirviendo archivos. Como ejemplo, puede configurar la carpeta superior de un sitio web en particular para que sea una carpeta específica en su sistema de archivos (usando Apache). Esto se considera "rootear" el sitio web en esa carpeta. Ningún usuario o navegador puede "ver" archivos de sus carpetas principales.

PHP, sin embargo, generalmente no tiene sus raíces en la misma ubicación que el sitio web.

Si sus archivos PHP están en varios niveles de carpeta, pero los necesita para incluir todos los archivos de la misma ubicación, entonces es posible que desee utilizar rutas absolutas.

Los detalles de cuál debería ser su ruta dependen completamente del sistema.

contestado el 16 de mayo de 11 a las 20:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.