require_once otro otra llamar incluir include_once funciona funcion desde conexion carpeta archivo php

otro - require php path



¿Cómo se sabe la ruta correcta para usar en una instrucción PHP require_once() (9)

Como muchos tengo un archivo config.php en la raíz de una aplicación web que quiero incluir en casi todos los demás archivos php. Entonces la mayoría de ellos tienen una línea como:

require_once("config.php");

o algunas veces

require_once("../config.php");

o incluso

require_once("../../config.php");

Pero nunca lo hice bien la primera vez. No puedo entender qué php va a considerar como el directorio de trabajo actual al leer uno de estos archivos. Aparentemente no es el directorio donde se realiza el archivo que contiene la llamada require_once () porque puedo tener dos archivos en el mismo directorio que tienen diferentes rutas para config.php.

Cómo tengo una situación en la que una ruta es correcta para actualizar la página, pero una ajax que puede actualizar parte de la página requiere una ruta diferente a config.php en la declaración require_once ();

¿Cuál es el secreto? ¿Desde dónde se evalúa ese camino?

Dispara, temía que esto no fuera un problema común. Esto ocurre en Apache 2.2.8 y PHP 5.2.6 ejecutándose en Windows.



El único lugar desde el que he visto evaluar la ruta es el archivo que está editando actualmente. Nunca he tenido ningún problema con eso, pero si lo es, es posible que desee proporcionar más información (versión de PHP, sistema operativo, etc.).


El directorio de trabajo actual para PHP es el directorio en el que se encuentra el archivo de script llamado. Si tus archivos se ven así:

/A foo.php tar.php B/ bar.php

Si llama a foo.php (ej: http://example.com/foo.php ), el directorio de trabajo será / A /. Si llama a bar.php (ej: http://example.com/B/bar.php ), el directorio de trabajo será / A / B /.

Ahí es donde se vuelve complicado. Digamos que foo.php es tal:

<?php require_once( ''B/bar.php'' ); ?>

Y bar.php es:

<?php require_once( ''tar.php''); ?>

Si llamamos a foo.php, entonces bar.php llamará con éxito a tar.php porque tar.php y foo.php están en el mismo directorio que resulta ser el directorio de trabajo. Si en su lugar llama a bar.php, fallará.

Generalmente verá en todos los archivos:

require_once( realpath( dirname( __FILE__ ) ).''/../../path/to/file.php'' );

o con el archivo de configuración:

// config file define( "APP_ROOT", realpath( dirname( __FILE__ ) ).''/'' );

con el resto de los archivos usando:

require_once( APP_ROOT.''../../path/to/file.php'' );


Incluyo este código en la parte superior de cada página:

//get basic page variables $self=$_SERVER[''PHP_SELF'']; $thispath=dirname($_SERVER[''PHP_SELF'']); $sitebasepath=$_SERVER[''DOCUMENT_ROOT'']; //include the global settings, variables and includes include_once("$sitebasepath/globals/global.include.php");

Incluya y exija que ambos tomen una ruta relativa o la ruta completa. Prefiero trabajar con la ruta completa y hacer todas mis referencias como la instrucción inlcude anterior. Esto me permite ingresar una variable general $ sitebasepath que maneja información específica de la cuenta que puede cambiar de máquina a máquina y luego simplemente escribir la ruta desde la raíz web, es decir. /globals/whatever_file.php

También uso la variable $ self en formularios que pueden llamarse a sí mismos para manejar la entrada de datos.

Espero que ayude.


La ruta del archivo PHP solicitado en el GET o POST original es esencialmente el ''directorio de trabajo'' de ese script. Cualquier script "incluido" o "requerido" lo heredará también como su directorio de trabajo.

Usaré las rutas absolutas en las instrucciones require o modificaré include_path de PHP para incluir cualquier ruta en mi aplicación que pueda querer usar para ahorrarme el tipeo extra. Lo encontrarás en php.ini.

include_path = ".: / list / of / paths /: / another / path /: / y / another / one"

No sé si te ayudará en esta instancia en particular, pero las constantes mágicas como FILE y DIR pueden ser útiles si alguna vez necesitas saber la ruta en la que se está ejecutando un archivo en particular.

http://us2.php.net/manual/en/language.constants.predefined.php


Me gusta hacer esto:

require_once(dirname(__FILE__)."/../_include/header.inc");

De esa manera, sus rutas siempre pueden ser relativas a la ubicación actual del archivo.


Si tiene suficientes derechos de acceso, intente modificar la configuración include_path de PHP para todo el sitio. Si no puede hacer eso, tendrá que enrutar cada solicitud a través del mismo script PHP (por ejemplo, usando mod_rewrite de Apache) o tendrá que usar un script de "inicialización" que configure el include_path:

$includeDir = realpath(dirname(__FILE__) . ''/include''); ini_set(''include_path'', $includeDir . PATH_SEPARATOR . ini_get(''include_path''));

Después de que se incluye ese archivo, use las rutas relativas al directorio de inclusión:

require_once ''../init.php''; // The init-script require_once ''MyFile.php''; // Includes /include/MyFile.php


Como require y require_once son muy similares a include e include_once, toda la documentación se publica en el área de documentación de funciones "include" en php.net. Desde esa página

Los archivos para incluir se buscan primero en cada entrada include_path relativa al directorio de trabajo actual, y luego en el directorio del script actual. Por ejemplo, si include_path es libraries, el directorio de trabajo actual es / www /, incluyó include / a.php y se incluye "b.php" en ese archivo, b.php se busca primero en / www / libraries / y luego en / www / include /. Si filename comienza con ./ o ../, solo se busca en el directorio de trabajo actual.

Además, puede encontrar todas las rutas de inclusión actuales haciendo un "php -i" desde la línea de comandos. Puede editar la ruta include en su archivo php.ini, y también a través de ini_set (). También puede ejecutar la función php_info () en su página para obtener una impresión de sus archivos si la CLI no es conveniente.


Uso la dirname( __FILE__ ) como bobwienholt la mayor parte del tiempo, pero lo que podría pagar es tener un punto base de entrada que cargue todos los otros códigos que definen una referencia constante a la raíz del proyecto, es decir,

define("ROOT",dirname(__FILE__).''/'' );

y luego todo lo que necesita saber es dónde está la ruta relativa a la raíz, es decir:

require(ROOT . "/lib/tool/error.php");

Nota,

Deberías REALMENTE evitar las rutas con "../" al comienzo de ellas, no son relativas al archivo, sino relativas a donde ERES y esto crea código roto.

cd foo php bar/baz.php -> some error saying it cant find the file cd bar php baz.php -> suddenly working.

Importante

Si usa la notación "../", se necesita ignorar por completo la Ruta de inclusión de PHP, Y SÓLO considera dónde está la persona que la ejecuta.