вызов include из включенного файла

так, изучение этой структуры каталогов

  • /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');?

так что мой вопрос: при включении файла "относительный путь включения" перемещается в включенный файл или остается в основном файле включения?

Я знаю, что лучшей альтернативой было бы иметь конфиг.php, который содержит root_path, однако это невозможно на данном этапе.


обновление:
Итак, я не уверен, кто прав, так как вот мой тест структура

/включать.в PHP
/ старт / старт.в PHP
/ folder1 / includeone.в PHP
/ folder1/folder2 / includetwo.в PHP

а вот содержимое каждого файла

начать.в PHP

<?php 
  echo 'including ../include.php<br />';
  include('../include.php');
?>

включить.в 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 />';
?>

и вывода

в том числе ../включать.в PHP
в том числе папка1/includeone.в PHP
в том числе папка2/includetwo.в PHP
сделал

2 ответов


"относительный путь включения" не смещается в включенный файл... Это означает, что использование относительных путей обычно заканчивается плохо.

лучшее решение, что я использую почти все время, это всегда работа с абсолютными путями, и вы можете смешивать родственников и абсолютные пути, используя __DIR__, чтобы получить каталог, содержащий файл, в котором это написано.


Например, в include_one.php вы используете :

require_once __DIR__ . '/include_two.php';

включить это в том же каталоге, что и include_one.php.


И, в main_file.php вы используете :

require_once __DIR__ . '/../include_one.php';

включить Это один каталог вверх.


При этом ваши includes будут работать, независимо от того, из какого файла они вызываются.


Я использую этот код:

if(!isset($TO_HOME_DIR)) $TO_HOME_DIR="../"; 

и я включаю файл:

include_once($TO_HOME_DIR."common/include_one.php");

С if(!isset($TO_HOME_DIR)), не важно, сколько вы включаете файл во включенный файл во включенный файл в includ..... Используется только объявление $TO_HOME_DIR первого и главного файлов.

второе преимущество этого подхода заключается в том, что при изменении каталога файла вам нужно изменить только одну строку кода; $to_home_dir объявление. :)