Tengo una estructura de directorio como la siguiente;
script.php
inc / include1.php
inc / include2.phpobjetos / object1.php
objetos / object2.phpjabón / soap.php
Ahora, uso esos objetos en ambos script.php
y /soap/soap.php
podría moverlos, pero quiero la estructura de directorio así por una razón específica. Cuando se ejecuta script.php
la ruta de inclusión es inc/include.php
y cuando la ejecución /soap/soap.php
Es ../inc
, el trabajo caminos absoluta, /mnt/webdev/[project name]/inc/include1.php...
pero es una solución fea si quiero mover el directorio a una ubicación diferente.
Entonces, ¿hay alguna forma de usar rutas relativas o una forma de generar programáticamente "/mnt/webdev/[project name]/"
?
DOCUMENT_ROOT
Puede utilizar rutas relativas. Prueba
__FILE__
. Esta es una constante de PHP que siempre devuelve la ruta / nombre de archivo del script en el que se encuentra. Entonces, ensoap.php
, podría hacer:Otra solución sería establecer una ruta de inclusión en su httpd.conf o un archivo .htaccess.
fuente
/
al comienzo de la expresión citada, para separar el..
del ARCHIVO nombre.__DIR__
lugar de tener que usardirname(__FILE__)
. (Documentos PHP)include dirname(__FILE__).'/../inc/include.php';
No olvide la "/" antes de la ruta relativa.Otra forma de manejar esto que elimina la necesidad de incluir es usar la función de carga automática . Incluir todo lo que su script necesita "por si acaso" puede afectar el rendimiento. Si sus inclusiones son todas definiciones de clase o interfaz y desea cargarlas solo cuando sea necesario, puede sobrecargar la
__autoload()
función con su propio código para encontrar el archivo de clase apropiado y cargarlo solo cuando se llame. Aquí está el ejemplo del manual:Siempre que establezca sus variables include_path en consecuencia, nunca más necesitará incluir un archivo de clase.
fuente
echa un vistazo a http://au.php.net/reserved.variables
Creo que la variable que estás buscando es:
$_SERVER["DOCUMENT_ROOT"]
fuente
Puede definir una constante con la ruta al directorio raíz de su proyecto y luego ponerla al principio de la ruta.
fuente
Otra opción, relacionada con la de Kevin, es usar
__FILE__
, pero reemplazar el nombre del archivo php desde dentro:He estado usando esto por un tiempo. El único problema es que a veces no tienes
$_SERVER['SCRIPT_NAME']
, pero a veces hay otra variable similar.fuente
¡Encontré que esto funcionaba muy bien!
Utilizar:
fuente
Creo que la mejor manera es poner sus inclusiones en su ruta de inclusión de PHP. Hay varias formas de hacer esto dependiendo de su configuración.
Entonces puede simplemente consultar
desde el interior de cualquier archivo, independientemente de dónde se encuentre, ya sea en sus archivos incluidos o accesibles en la web, o en cualquier nivel de subdirectorios anidados.
Esto le permite tener sus archivos de inclusión fuera de la raíz del servidor web, lo cual es una buena práctica.
p.ej
Además, consulte __autoload para la carga diferida de archivos de clase
http://www.google.com/search?q=setting+php+include+path
http://www.google.com/search?q=__autoload
fuente
Yo uso esta línea de código. Vuelve a la "parte superior" del árbol del sitio, luego va al archivo deseado.
Por ejemplo, digamos que tengo este árbol de archivos:
Puedo incluir el archivo functions.php desde donde esté, simplemente copiando y pegando
Si necesita usar este código muchas veces, puede crear una función que devuelva la
str_repeat('../',(substr_count(getenv('SCRIPT_URL'),'/')-1))
pieza. Luego, inserte esta función en el primer archivo que incluya. Tengo un archivo "initialize.php" que incluyo en la parte superior de cada página php y que contiene esta función. La próxima vez que tenga que incluir archivos, de hecho solo uso la función (nombradapath_back
):fuente
Oh sí, absolutamente. Entonces, por ejemplo, usamos una sola capa de subcarpetas, generalmente:
Debe tener cuidado al confiar demasiado en la ruta de inclusión en sitios de mucho tráfico, porque php tiene que buscar en el directorio actual y luego en todos los directorios de la ruta de inclusión para ver si su archivo está allí y esto puede ralentizar las cosas si te golpean.
Entonces, por ejemplo, si está haciendo MVC, pondría la ruta al directorio de su aplicación en la ruta de inclusión y luego especificaría referirse a cosas en el formulario
o lo que sea.
Pero en términos generales, solo le permite trabajar con rutas realmente cortas en su PHP que funcionarán desde cualquier lugar y es mucho más fácil de leer que todo el malarkey raíz del documento realpath.
El beneficio de esas alternativas basadas en scripts que otros han sugerido es que funcionan en cualquier lugar, incluso en cajas compartidas; configurar la ruta de inclusión requiere un poco más de pensamiento y esfuerzo, pero como mencioné le permite comenzar a usar __autoload, que es el más genial.
fuente
Si va a incluir una ruta específica en la mayoría de los archivos de su aplicación, cree una variable global en su carpeta raíz.
Ahora, esta variable global " APPLICATION_PATH " se puede utilizar para incluir todos los archivos en lugar de llamar a realpath () cada vez que incluye un nuevo archivo.
EX:
Espero eso ayude ;-)
fuente