При использовании функций PHP include()
и require()
для включения файла, который, в свою очередь, включает в себя другой файл, PWD (относительная ссылка) для второго файла include()
является каталогом для (первый скрипт в стеке, называемый Apache), а не для текущего файла. Каково конструктивное решение, и что такое прецедент?PHP include(): Use case for include из исходного PWD сценария
Например, предположим, что общий класс соединения с базой данных, определенный в ~/public_html/classes/database.php
, сохраняет свои данные конфигурации (имена пользователей, пароли) из корня сети в ~/config.php
. Автор класса конфигурации базы данных логически вызовет файл конфигурации с относительным именем файла ../../config.php
. Однако это не работает так, как ожидалось, потому что PWD не относится к файлу database.php
, а скорее к файлу, который включает его, который может быть ~/public_html/index.php
, ~/public_html/someDir/somePage.php
или в другом месте.
Я знаю, чтобы обойти это, получив каталог текущего файла с dirname(__FILE__)
. Тем не менее, я не могу представить ни одного случая использования, где я хотел бы, чтобы require()
или include()
относился к исходному месту сценария. Каков прецедент для того, чтобы быть таким, каким он есть?
Я обращаюсь к составному 'include()' s, для которого PWD первого файла 'include()' ed остается тем же PWD, что и исходный файл. Я всегда находил это раздражением и никогда не помогал. – dotancohen
Я понимаю, не мой ответ ясен? Я постараюсь перефразировать. –
@dotancohen Я перефразировал ответ. Надеюсь, вы сейчас поймете соображения дизайна. За этим стоит логика, даже если вы не согласны с выбором. –