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_once
est à 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 à include
tous 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.