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 :
define( 'SCRIPT_ROOT', __FILE__ );
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:
if( ! defined( 'SCRIPT_ROOT' ) ) {
define( 'SCRIPT_ROOT`, __FILE__ );
}
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 porget_included_files()
.
Solo leemos
El script llamado originalmente se considera un "archivo incluido", por lo que se enumerará junto con los archivos a los que hace referencia include y family.
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 que realpath()
es innecesario.