Une façon simple d'avoir le chemin absolu du script exécuté d' abord , dans ce script et tout autre script inclus avec include, require, require_onceest à l'aide d' une constante et le stockage il le chemin du script en cours au début du script principal :
define( 'SCRIPT_ROOT', __FILE__ );
La solution ci-dessus convient quand il existe un seul script "principal" qui correspond à includetous les autres scripts nécessaires, comme dans la plupart des applications Web.
Si ce n'est pas le cas et qu'il peut y avoir plusieurs "scripts initiaux", alors pour éviter les redéfinitions et pour avoir le chemin correct stocké dans la constante, chaque script peut commencer par:
if( ! defined( 'SCRIPT_ROOT' ) ) {
define( 'SCRIPT_ROOT`, __FILE__ );
}
Une note sur la réponse (actuellement) acceptée :
la réponse indique que le chemin du script initialement exécuté est le premier élément du tableau renvoyé par get_included_files().
Il s'agit d'une solution intelligente et simple et -au moment de l'écriture- (nous sommes presque à PHP 7.4.0) cela fonctionne .
Cependant, en regardant la documentation, il n'est pas mentionné que le script initialement exécuté est le premier élément du tableau retourné par get_included_files().
Nous lisons seulement
Le script appelé à l'origine est considéré comme un "fichier inclus", il sera donc répertorié avec les fichiers référencés par include et family.
Au moment de l'écriture, le " script appelé à l'origine " est le premier du tableau mais - techniquement - il n'y a aucune garantie que cela ne changera pas à l'avenir.
Une note sur realpath(), __FILE__et __DIR__:
D' autres ont suggéré dans leurs réponses l'utilisation de __FILE__, __DIR__, dirname(__FILE__), realpath(__DIR__)...
dirname(__FILE__)est égal à __DIR__(introduit en PHP 5.3.0), il suffit donc de l'utiliser __DIR__.
Les deux __FILE__et __DIR__sont toujours des chemins absolus, il realpath()n'est donc pas nécessaire.