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_oncees 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 includees 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.