Un modo semplice per avere il percorso assoluto della scrittura eseguita inizialmente , in quello script e qualsiasi altro script incluso con include
, require
, require_once
è quello di utilizzare una costante e archiviazione esiste il percorso dello script corrente iniziale del script principale :
define( 'SCRIPT_ROOT', __FILE__ );
La soluzione sopra è adatta quando esiste un singolo script "principale" che include
è ogni altro script necessario, come nella maggior parte delle applicazioni web.
In caso contrario e potrebbero esserci diversi "script iniziali", per evitare ridefinizioni e per memorizzare il percorso corretto all'interno della costante, ogni script può iniziare con:
if( ! defined( 'SCRIPT_ROOT' ) ) {
define( 'SCRIPT_ROOT`, __FILE__ );
}
Una nota sulla risposta (attualmente) accettata :
la risposta afferma che il percorso di script inizialmente eseguito è il primo elemento dell'array restituito da get_included_files()
.
Questa è una soluzione intelligente e semplice e, al momento della scrittura, (siamo quasi a PHP 7.4.0) funziona .
Tuttavia, guardando la documentazione non si fa menzione del fatto che lo script inizialmente eseguito è il primo elemento dell'array restituito da get_included_files()
.
Abbiamo solo letto
Lo script originariamente chiamato è considerato un "file incluso", quindi verrà elencato insieme ai file a cui fanno riferimento include e family.
Al momento in cui scrivo lo " script originariamente chiamato " è il primo dell'array ma - tecnicamente - non esiste alcuna garanzia che ciò non cambierà in futuro.
Una nota su realpath()
, __FILE__
e __DIR__
:
Altri hanno suggerito nelle loro risposte l'uso di __FILE__
, __DIR__
, dirname(__FILE__)
, realpath(__DIR__)
...
dirname(__FILE__)
è uguale a __DIR__
(introdotto in PHP 5.3.0), quindi basta usare __DIR__
.
Entrambi __FILE__
e __DIR__
sono sempre percorsi assoluti quindi realpath()
non è necessario.