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

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

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

includeone.php

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

includetwo.php

<?php 
  echo 'done<br />';
?>

и вывод

включая../include.php
включая folder1/includeone.php
включая folder2/includetwo.php
готово

27
задан Hailwood 26 July 2010 в 12:47
поделиться

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 , который находится на один каталог выше.


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

52
ответ дан 28 November 2019 в 05:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: