Php includes есть ли способ включить файл, относящийся только к этому документу?

Если у меня есть файл index.php, который включает inc/footer.php, я бы написал:

include 'inc/footer.php';

Если я хочу включить другой файл в footer.php, я должен сделать это относительно файла index.php(тот, который его включает). Это может быть не проблема, но как насчет того, хочу ли я включить index.php из целого другого местоположения?

Я понимаю, что для достижения этого существует несколько способов, например, определение абсолютного пути или использование dirname (FILE).

Это то, что никогда не было настоящей проблемой, так как так или иначе я всегда это понимал, но я всегда задавался вопросом, как именно включить работу в php.

Может кто-нибудь объяснить мне, что происходит под капотом?

Спасибо

Ответ 1

Это может помочь: (от http://php.net/manual/en/function.include.php)

Сначала отображаются файлы для включения в каждой строке include_path относительно текущего рабочего каталога, а затем в каталоге тока script. Например. если ваш include_path - это библиотеки, текущие Рабочий каталог -/www/, вы включая include/a.php, и есть включить "b.php" в этот файл, b.php сначала просматривается в /www/libraries/ а затем в /www/include/. Если имя файла начинается с./или../, это выглядит только в текущем рабочем каталога или родителя текущего рабочий каталог, соответственно

В вашем вопросе говорится:

Если я хочу включить другой файл внутри footer.php, я должен это сделать относительно файла index.php( тот, который включает его).

Это верно, только если путь к файлу, который вы пытаетесь выполнить include(), начинается с ./ или ../. Если вам нужно добавить файл над текущим файлом, используя относительный путь, вы можете (как вы сказали) использовать:

include( dirname(__FILE__) . '/../file.php')

Если вы определяете абсолютный путь, вы также можете добавить это к текущему include_path:

set_include_path(get_include_path() . PATH_SEPARATOR . '/absolute/path');

Затем вы можете выполнить все свои действия относительно "/absolute/path/".

Ответ 2

Лучшее место для поиска ответа в руководстве PHP.

http://php.net/manual/en/function.include.php

Короткий ответ: путь относится к исполняемому PHP script, а не к югу.

Лучший глобальный абсолютный путь к вашим функциям, папкам классов и т.д.