Простой способ иметь абсолютный путь , первоначально выполненного сценария , в этом сценарии и любой другой сценарий с включенным include
, require
, require_once
является использование константы и хранения есть текущий путь сценария в начале основного скрипта :
define( 'SCRIPT_ROOT', __FILE__ );
Приведенное выше решение подходит, когда есть один «основной» сценарий, который содержит include
все остальные необходимые сценарии, как в большинстве веб-приложений.
Если это не так, и может быть несколько «базовых сценариев», то во избежание переопределений и сохранения правильного пути внутри константы каждый сценарий может начинаться с:
if( ! defined( 'SCRIPT_ROOT' ) ) {
define( 'SCRIPT_ROOT`, __FILE__ );
}
Примечание о (в настоящее время) принятом ответе :
в ответе указывается, что изначально выполненный путь к сценарию является первым элементом массива, возвращаемого функцией get_included_files()
.
Это умное и простое решение, и - на момент написания - (мы почти на PHP 7.4.0) оно работает .
Однако, глядя на документацию, нет никаких упоминаний о том, что первоначально выполненный скрипт является первым элементом массива, возвращаемого get_included_files()
.
Мы только читаем
Первоначально вызванный скрипт считается «включенным файлом», поэтому он будет указан вместе с файлами, на которые ссылаются include и family.
На момент написания « первоначально названный скрипт » был первым в массиве, но - технически - нет никакой гарантии, что это не изменится в будущем.
Примечание о realpath()
, __FILE__
и __DIR__
:
Другие предположили в своих ответах на использование __FILE__
, __DIR__
, dirname(__FILE__)
, realpath(__DIR__)
...
dirname(__FILE__)
равно __DIR__
(введено в PHP 5.3.0), так что просто используйте __DIR__
.
И то, __FILE__
и другое __DIR__
всегда являются абсолютными путями, поэтому нет realpath()
необходимости.