Если у меня есть файл index.php, который включает inc / footer.php, я бы написал:
include 'inc/footer.php';
Если я хочу включить другой файл в footer.php, я должен сделать это относительно файла index.php (тот, который его включает). Это может быть не проблема, но как насчет того, хочу ли я включить index.php из другого места?
Я понимаю, что существует несколько способов достижения этого, например, определение абсолютного пути или использование dirname ( FILE ).
Это то, что никогда не было настоящей проблемой, так как так или иначе я всегда это понимал, но я всегда задавался вопросом, как именно включить работу в php.
Может ли кто-нибудь объяснить мне, что происходит под капотом?
благодаря
Это может помочь: (из http://php.net/manual/en/function.include.php )
Файлы для включения сначала просматриваются в каждой записи include_path относительно текущего рабочего каталога, а затем в каталоге текущего скрипта. Например, если ваш include_path является библиотекой, текущим рабочим каталогом является / www /, вы включили include / a.php, и в этом файле есть «b.php», b.php сначала просматривается в / www / libraries /, а затем в / WWW / включить /. Если имя файла начинается с ./ или ../, он просматривается только в текущем рабочем каталоге или родителе текущего рабочего каталога, соответственно
В вашем вопросе говорится:
Если я хочу включить другой файл в footer.php, я должен сделать это относительно файла index.php (тот, который его включает).
Это верно, только если путь к файлу, который вы пытаетесь include()
начинается с ./
или ../
. Если вам нужно добавить файл над текущим файлом, используя относительный путь, вы можете (как вы сказали) использовать:
include( dirname(__FILE__) . '/../file.php')
Если вы определяете абсолютный путь, вы также можете добавить это к текущему пути include_path:
set_include_path(get_include_path() . PATH_SEPARATOR . '/absolute/path');
Затем вы можете выполнить все свои действия относительно «/ absolute / path /».
Лучшее место для поиска ответа в руководстве PHP.
http://php.net/manual/en/function.include.php
Короткий ответ: путь относится к исполняемому скрипту PHP, который не включает sub.
Наилучшим методом является глобальный абсолютный путь к вашим функциям, папкам классов и т. Д.