Я собираюсь принять математический подход. PHP всегда включает дополнительные файлы из текущего рабочего каталога , за исключением текущего файла.
Таким образом, если мы находимся в файле C (index.php), мы находимся на уровне 4. Файл C включает файл B, который находится в родительском каталоге (в соответствии с ../
), который будет на уровне 3.
Теперь файл B включен внутри файл C (с дополнительным акцентом внутри). Мы все еще работаем с уровня 4, а не с уровня 3. Поэтому, когда вы пытаетесь включить файл A, мы технически включаем файл A в файл C, а не в файл B, поэтому путь идет только вверх по 3 каталогам вместо 4 каталоги, через которые он должен пройти.
Таким образом, когда мы выполняем файл B, который находится на уровне 3, включаемый файл A поднимется на три уровня до уровня 0, который является подходящим местом для поиска файла.
Я бы предложил использовать абсолютные пути для доступа к всем файлам, потому что использование относительных путей вызывает только проблемы, такие как тот, в котором вы оказались здесь.
То, как я это делаю, - это установка корневой переменной, доступной во всех моих сценариях, для использования для определения абсолютных путей. Я поместил его в свой файл index.php, поскольку это единственный файл, который когда-либо запускался.
$ani->i->root = dirname(str_replace("\\", "/", __FILE__));
// Where my $ani variable is accessible everywhere.
Таким образом, когда мне нужно включить / потребовать файлы, я могу просто сделать что-то вроде include "{$ani->i->root}/modules/somemodule.php"
и не беспокоиться о путях и т. Д.