вызов включения из включенного файла - PullRequest
27 голосов
/ 26 июля 2010

Итак, исследуя эту структуру каталогов

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

Итак, мой вопрос: при включении файла «относительный путь включения» перемещается во включаемый файл или он остается на главном, включаяfile?

Мне известно, что наилучшей альтернативой будет иметь файл 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
done

Ответы [ 3 ]

51 голосов
/ 26 июля 2010

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

Лучшее решение, которое я использую почти все время, - это всегдаработать с абсолютными путями - и вы можете смешивать родственники и абсолютные пути, используя __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 на один каталог вверх.


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

0 голосов
/ 03 июня 2019

Путь включения относительно первого файла в цепочке включения.

Хороший способ обеспечить правильный путь включения - всегда включать из корня документа.

Это делается так:

include $_SERVER['DOCUMENT_ROOT'] . '/folder1/folder2/includetwo.php';

0 голосов
/ 04 апреля 2017

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

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

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

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

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

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

...