He buscado arriba y abajo y obtengo muchas soluciones y variables diferentes que contienen información para obtener la ruta absoluta. Pero parecen funcionar en algunas condiciones y no en otras. ¿Hay una forma de bala de plata para obtener la ruta absoluta del script ejecutado en PHP? Para mí, el script se ejecutará desde la línea de comandos, pero una solución debería funcionar igual de bien si se ejecuta dentro de Apache, etc.
Aclaración: El script ejecutado inicialmente, no necesariamente el archivo donde se codifica la solución.
Respuestas:
La solución correcta es usar la
get_included_files
función:Esto le dará la ruta absoluta de la secuencia de comandos inicial, incluso si:
Aquí hay dos scripts de prueba; El guión principal y un archivo incluido:
Y el resultado; observe el directorio actual:
fuente
get_included_files()
. Yo sugiero a la tienda__FILE__
en una constante en el comienzo de la secuencia de comandos destinado a ser ejecutado inicialmente.__FILE__
constante le dará la ruta absoluta al archivo actual.Actualización :
La pregunta se cambió para preguntar cómo recuperar el script ejecutado inicialmente en lugar del script actualmente en ejecución. La única (??) forma confiable de hacerlo es usar la
debug_backtrace
función.fuente
__FILE__
Devolvería la ubicación de index.php o la ubicación del archivo incluido? ¿Cómo obtendría la ubicación de index.php?__FILE__
apunta a la ruta del script actual. Pero no he encontrado nada que muestre la ruta actual de index.php.La respuesta se ha movido aquí: https://stackoverflow.com/a/26944636/2377343
fuente
str_replace( basename(__FILE__) , '',str_replace($_SERVER["DOCUMENT_ROOT"],'',str_replace('\\','/',__FILE__ ) ) ) === /folder1/folder2/
Si coloca esto en un archivo incluido, imprime la ruta a esta inclusión. Para obtener la ruta del script principal, reemplace
__FILE__
con$_SERVER['PHP_SELF']
. ¡Pero tenga en cuenta que PHP_SELF es un riesgo de seguridad!fuente
__FILE__
siempre contiene una ruta absoluta con enlaces simbólicos resueltos, mientras que en versiones anteriores contenía una ruta relativa en algunas circunstancias". más "dirname () opera ingenuamente en la cadena de entrada, y no conoce el sistema de archivos real o los componentes de ruta como '..'.PHP_SELF
?Del manual :
Nota :
__DIR__
se agregó en PHP 5.3.0.fuente
Si quieres obtener el directorio de trabajo actual, use
getcwd()
http://php.net/manual/en/function.getcwd.php
__FILE__
devolverá la ruta con el nombre del archivo, por ejemplo, en XAMPP enC:\xampp\htdocs\index.php
lugar deC:\xampp\htdocs\
fuente
dará la ruta absoluta del archivo actual desde el que solicita la ruta, la ruta del directorio de su servidor.
archivos de ejemplo:
www / http / html / index.php; si coloca este código dentro de su index.php devolverá:
<?php echo dirname(__FILE__); // this will return: www/http/html/
www / http / html / class / myclass.php; si coloca este código dentro de su myclass.php devolverá:
<?php echo dirname(__FILE__); // this will return: www/http/html/class/
fuente
Solo use a continuación:
fuente
a.php->b.php->c.php
debería ser la ruta de a.php si se marca en c.php . La única forma que parece ser confiable es usar la función debug_backtrace () .le da el directorio actual del script (el script dentro del cual colocó este código) sin barra diagonal final. Esto es importante si desea incluir otros archivos con el resultado
fuente
Si está buscando la ruta absoluta relativa a la raíz del servidor, descubrí que esto funciona bien:
fuente
Aquí hay una útil función PHP que escribí para esto precisamente. Como aclara la pregunta original, devuelve la ruta desde la que se ejecutó el script inicial , no el archivo en el que estamos actualmente.
fuente
prueba esto en tu script
fuente
Para la secuencia de comandos ejecutada en el servidor web
$_SERVER['SCRIPT_FILENAME']
contendrá la ruta completa a la secuencia de comandos inicialmente llamada, por lo que probablemente su index.php.realpath()
No es necesario en este caso.Para el script ejecutado desde la consola
$_SERVER['SCRIPT_FILENAME']
, contendrá la ruta relativa a su script inicialmente llamado desde su directorio de trabajo actual. Entonces, a menos que haya cambiado el directorio de trabajo dentro de su script, se resolverá en la ruta absoluta.fuente
Esto es lo que uso y funciona en entornos Linux. No creo que esto funcione en una máquina con Windows ...
fuente
Una manera simple de tener la ruta absoluta del guión inicialmente ejecutado , en esa secuencia de comandos y cualquier otra secuencia de comandos se incluye con
include
,require
,require_once
es mediante el uso de una constante y almacenar allí la ruta del script actual al inicio del script principal :La solución anterior es adecuada cuando hay un solo script "principal" que
include
es cualquier otro script necesario, como en la mayoría de las aplicaciones web.Si ese no es el caso y puede haber varios "guiones iniciales", para evitar redefiniciones y tener la ruta correcta almacenada dentro de la constante, cada guión puede comenzar con:
Una nota sobre la respuesta (actualmente) aceptada :
la respuesta indica que la ruta de script ejecutada inicialmente es el primer elemento de la matriz devuelta por
get_included_files()
.Esta es una solución inteligente y simple y, al momento de escribir, (estamos casi en PHP 7.4.0) funciona .
Sin embargo, al mirar la documentación no se menciona que el script ejecutado inicialmente es el primer elemento de la matriz devuelto por
get_included_files()
.Solo leemos
Al momento de escribir, el " script originalmente llamado " es el primero en la matriz pero, técnicamente , no hay garantía de que esto no cambie en el futuro.
Una nota acerca
realpath()
,__FILE__
y__DIR__
:Otros han sugerido en sus respuestas al uso de
__FILE__
,__DIR__
,dirname(__FILE__)
,realpath(__DIR__)
...dirname(__FILE__)
es igual a__DIR__
(introducido en PHP 5.3.0), así que solo use__DIR__
.Ambos
__FILE__
y__DIR__
siempre son caminos absolutos, por lo querealpath()
es innecesario.fuente