Prostym sposobem, aby mieć absolutną ścieżkę początkowo wykonywanego skryptu , w tym skrypcie i każdego innego skryptu dołączona include
, require
, require_once
jest za pomocą stałej i przechowywanie tam bieżącą ścieżkę skryptu na początku głównego skryptu :
define( 'SCRIPT_ROOT', __FILE__ );
Powyższe rozwiązanie jest odpowiednie, gdy istnieje jeden „główny” skrypt, który include
jest wszystkim innym potrzebnym skryptem, jak w większości aplikacji internetowych.
Jeśli tak nie jest i może istnieć kilka „skryptów początkowych”, aby uniknąć redefinicji i mieć prawidłową ścieżkę przechowywaną w stałej, każdy skrypt może zaczynać się od:
if( ! defined( 'SCRIPT_ROOT' ) ) {
define( 'SCRIPT_ROOT`, __FILE__ );
}
Uwaga na temat (obecnie) akceptowanej odpowiedzi :
odpowiedź stwierdza, że początkowo wykonana ścieżka skryptu jest pierwszym elementem tablicy zwróconym przez get_included_files()
.
Jest to sprytne i proste rozwiązanie i - w momencie pisania - (jesteśmy prawie w PHP 7.4.0) działa .
Jednak patrząc na dokumentację nie ma wzmianki, że początkowo wykonany skrypt jest pierwszym elementem tablicy zwróconym przez get_included_files()
.
My tylko czytamy
Pierwotnie wywoływany skrypt jest uważany za „dołączony plik”, dlatego zostanie wymieniony wraz z plikami, do których odwołują się dołączenia i rodzina.
W momencie pisania „ skrypt pierwotnie nazwany ” jest pierwszym w tablicy, ale - technicznie rzecz biorąc - nie ma gwarancji, że nie zmieni się to w przyszłości.
Uwaga na temat realpath()
, __FILE__
oraz __DIR__
:
Inni sugerowali w swoich odpowiedziach użycia __FILE__
, __DIR__
, dirname(__FILE__)
, realpath(__DIR__)
...
dirname(__FILE__)
jest równy __DIR__
(wprowadzony w PHP 5.3.0), więc po prostu użyj __DIR__
.
Zarówno __FILE__
i __DIR__
zawsze ścieżki bezwzględne więc realpath()
nie jest konieczne.