Подтвердить что ты не робот

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

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

  • /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
сделано

4b9b3361

Ответ 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.:)