Простий спосіб встановити абсолютний шлях спочатку виконаного сценарію , у цей скрипт та будь-який інший скрипт включений із 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()
зайве.