Правильным решением является использование функции get_included_files
:
list($scriptPath) = get_included_files();
Это даст вам абсолютный путь к исходному сценарию, даже если:
- Эта функция находится внутри включенного файла
- Текущий рабочий каталог отличается от каталога исходного скрипта
- Сценарий выполняется с CLI, как относительный путь
Вот два тестовых сценария; основной скрипт и включенный файл:
# C:\Users\Redacted\Desktop\main.php
include __DIR__ . DIRECTORY_SEPARATOR . 'include.php';
echoScriptPath();
# C:\Users\Redacted\Desktop\include.php
function echoScriptPath() {
list($scriptPath) = get_included_files();
echo 'The script being executed is ' . $scriptPath;
}
И результат; обратите внимание на текущий каталог:
C:\>php C:\Users\Redacted\Desktop\main.php
The script being executed is C:\Users\Redacted\Desktop\main.php