Я пытаюсь получить путь к каталогу, который содержит сценарий PHP. Давайте назовем это script.php. Он также содержит включенный log.php.
script.php:
include_once __DIR__.'/../lib/log.php';
func();
log.php:
function func() {
file_put_contents(__DIR__.'/log', 'Log file successfully created');
}
Я исполняю script.php ожидая журнал файл появляется вместе с script.php но этого не происходит. Что происходит вместо этого журнал файл создается в Lib каталог вместе с log.php файл.
Единственный обходной путь, который я вижу здесь, — это пройти путь к log.php через функцию в качестве аргумента вроде этого:
script.php:
include_once __DIR__.'/../lib/log.php';
func(__DIR__);
log.php:
function func($arg) {
file_put_contents($arg.'/log', 'Log file successfully created');
}
Возможно ли на самом деле получить путь к script.php через log.php не передавая никаких аргументов?
Я просто хочу включить скрипт, вызвать функцию и создать новый файл вместе со скриптом, который содержит include.
Нет. PHP не делает доступными какие-либо метаданные, кроме тех, которые относятся к файлу, который он в данный момент выполняет.
Что ты Можно Чтобы сделать путь к файлу немного проще, определите константу в вашем файле конфигурации или заголовочном файле, которая определяет абсолютный путь к корню вашего приложения. Например:
define('APPROOT', __DIR__);
Или же:
define('APPROOT', __DIR__ . '/../myapp');
Затем вы можете определить пути в своем приложении, не пытаясь полагаться на то, где сценарий происходит, например:
$log_file = APPROOT . '/log/foo.log';
Других решений пока нет …