Вызов включает из включенного файла
Итак,
изучение этой структуры каталогов
- /include_one.php
- /include_two.php
- /directory/main_file.php
Предположим, что я в /directory/main _file.php, и я вызываю include('../include_one.php');
внутри include_one.php, чтобы включить include_two.php. Нужно ли мне звонить include('include_two.php);
или include('../include_two.php');
?
Итак, мой вопрос: если включить файл, является ли "относительный путь включения" переведенным во включенный файл или он остается в основном включенном файле?
Я знаю, что лучшей альтернативой было бы иметь config.php, который содержит root_path, однако на данном этапе это невозможно.
обновление:
Итак, я не уверен, кто прав, так как здесь мой тест
Структура каталога
/include.php
/start/start.php
/folder 1/includeone.php
/folder 1/folder2/includetwo.php
и вот содержимое каждого файла
start.php
<?php
echo 'including ../include.php<br />';
include('../include.php');
?>
include.php
<?php
echo 'including folder1/includeone.php<br />';
include('folder1/includeone.php');
?>
includeone.php
<?php
echo 'including folder2/includetwo.php<br />';
include('folder2/includetwo.php');
?>
includetwo.php
<?php
echo 'done<br />';
?>
а выход -
включая../include.php
включая папку1/includeone.php
в том числе folder2/includetwo.php
сделано
Ответы
Ответ 1
"относительный путь включения" не смещается во включенный файл... Это означает, что использование относительных путей обычно заканчивается плохо.
Лучшее решение, которое я использую почти все время, - это всегда работать с абсолютными путями - и вы можете смешивать родственники и абсолютные пути с помощью __DIR__
, чтобы получить каталог, содержащий файл, где это написано.
Например, в include_one.php
вы должны использовать:
require_once __DIR__ . '/include_two.php';
Чтобы включить файл include_two.php
в том же каталоге, что и include_one.php
.
И, в main_file.php
, вы должны использовать:
require_once __DIR__ . '/../include_one.php';
Чтобы включить файл include_one.php
в один каталог вверх.
При этом ваши включенные функции будут работать независимо от того, из какого файла они вызываются.
Ответ 2
Я использую этот код:
if(!isset($TO_HOME_DIR)) $TO_HOME_DIR="../";
И я включаю файл:
include_once($TO_HOME_DIR."common/include_one.php");
С if(!isset($TO_HOME_DIR))
, это не важно, как вы включаете файл в включенный файл в включенный файл в include..... Используется только первый файл - и файл основного файла - $TO_HOME_DIR.
Второе преимущество этого подхода заключается в том, что если вы меняете каталог файла, вам нужно только изменить одну строку кода; Объявление $TO_HOME_DIR.:)