Итак, рассмотрим эту структуру каталогов
Предположим, что я в /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
/folder1/includeone.php
/folder1/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'); ?>
в<?php echo 'including folder1/includeone.php<br />'; include('folder1/includeone.php'); ?>
includeone.php
<?php echo 'including folder2/includetwo.php<br />'; include('folder2/includetwo.php'); ?>
в<?php echo 'including folder2/includetwo.php<br />'; include('folder2/includetwo.php'); ?>
includetwo.php
<?php echo 'done<br />'; ?>
и выход
включая ../include.php
включая папку1 / includeone.php
включая папку2 / includetwo.php
сделанный
«Относительный путь включения» не смещается во включенный файл … Это означает, что использование относительных путей обычно заканчивается плохо.
Лучшее решение, которое я использую почти все время, – это всегда работать с абсолютными путями – и вы можете смешивать родственников и абсолютные пути с помощью __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
в один каталог вверх.
При этом ваши включенные функции будут работать независимо от того, из какого файла они вызываются.
Я использую этот код:
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. 🙂