Prostym sposobem, aby mieć absolutną ścieżkę początkowo wykonywanego skryptu , w tym skrypcie i każdego innego skryptu dołączona include, require, require_oncejest 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 includejest 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.