otra - ¿Cómo puedo formatear una ruta include() absoluta de PHP(en lugar de relativa)?
llamar funcion php desde otro php (9)
En varias páginas de mi sitio web PHP y en varios directorios anidados, quiero incluir un archivo específico en una ruta relativa a la raíz.
¿Qué comando único puedo poner en ambas páginas ...
http://www.example.com/pageone.php
http://www.example.com/somedirectory/pagetwo.php
... para incluir esta página:
http://www.example.com/includes/analytics.php
Esto no funciona:
<?php include(''/includes/analytics.php''); ?>
¿Importa que esté alojado en IIS en Windows?
Como dice @Stefan Mai, PHP no tiene una ruta de acceso "raíz", pero puede definirla con bastante facilidad: la mayoría de los sitios tienen una página que se incluye cada vez (por ejemplo, archivo de configuración), a la que puede agregar:
define(''ROOT'', dirname(__FILE__));
Luego usa incluir ROOT. ''/includes/analytics.php'';
Algo que también es bastante útil es la directiva auto_prepend, que puede usar en .htaccess en apache; no está seguro de configurarlo en IIS (aunque puede tener uno global en PHP ini).
Esto funciona.
<?php include(''c:/inetpub/example.com/includes/analytics.php''); ?>
Tendré que hacer que c:/inetpub/example.com/
parte de algún tipo de variable global, por lo que es algo portátil de servidor a servidor.
La cáscara se interpreta como un carácter especial por el shell, por lo que su uso dentro de código PHP no funcionará independientemente del sistema operativo.
Si intenta acceder a algo relativo al directorio de inicio de un usuario, puede probar getenv()
: estoy seguro de que Windows establece una variable de entorno equivalente a $HOME
.
Solo puede usar include $_SERVER[''DOCUMENT_ROOT''] . "/includes/analytics.php";
include $_SERVER[''DOCUMENT_ROOT''] . "/includes/analytics.php";
Use ... para subir un directorio. Entonces en pageone.php
include ''includes/analytics.php'';
en pagetwo.php
include ''../includes/analytics.php'';
No hay ninguna noción de "raíz" como te refieres en PHP hasta donde yo sé, aunque podrías definirlo si quisieras. ¡La mejor de las suertes!
Combiné las sugerencias anteriores y se me ocurrió esto.
En mi archivo config.php
, defino ROOT como:
define(''ROOT'', $_SERVER[''DOCUMENT_ROOT'']);
Luego lo uso en mis archivos exitosos:
include_once(ROOT."/someFile.php");
include_once(ROOT."/includes/someFile.php");
La forma en que encontré es:
<?php include $_SERVER[''DOCUMENT_ROOT''].''//Your//Site//Path.php'' ?>
El // es necesario cuando tienes algún carácter especial que se puede escapar (es decir, / n), de modo que // es / en la cadena.
Como está en Windows, debe usar / en lugar de /
Desde la perspectiva de PHP root es la parte superior del sistema de archivos en el servidor web, no la raíz desde la perspectiva del navegador web.
La mayoría de las personas hace uno de los siguientes.
Defina una constante en un archivo de configuración global y utilícela en cada llamada para requerir / incluir.
O usan un código como este.
require_once realpath(dirname(__FILE__).''/config.php'');
require_once realpath(dirname(__FILE__).''/lib/Database.php'');
Usar las variables ambientales puede ser peligroso en algunos casos y ser la fuente de problemas de seguridad.
Si le da a include () o require () (o las * _conversiones) una ruta de acceso absoluta, ese archivo se incluirá. Un nombre de ruta absoluto comienza con un "/" en Unix, y con una letra de unidad y dos puntos en Windows.
Si proporciona una ruta relativa (cualquier otra ruta), PHP buscará en los directorios en el valor de configuración "include_path" en orden, hasta que se encuentre una coincidencia o no haya más directorios para buscar.
Entonces, en resumen, para incluir un nombre de archivo absoluto, dé un nombre de archivo absoluto. Ver también la función realpath () .
Si desea establecer su propio incluir "raíz", eche un vistazo a esta pregunta (específicamente mi respuesta, por supuesto :-)