2014-02-28 3 views
0

Это может быть немного глупый вопрос. Допустим, у меня есть каталог, как это:Файловые каталоги

./index.php 

./browse/blog.php 
./browse/articles.php 
./browse/categories.php 

./includes/header.php 
./includes/footer.php 

./classes/init.php 
./classes/core.php 

./user/login.php 
./user/register.php 

Мой init.php и core.php должны быть включены во все мои файлы index.php и например blog.php, articles.php и categories.php.

Если я включил core.php и init.php в header.php, он отлично работает в index.php. Но он не работает в articles.php, blog.php и так далее в основном все, что находится в папках (просмотреть или пользователя)

header.php содержит include_once('../classes/core.php'); и include_once('../classes/init.php');

Так что мой вопрос, как я смогу включить файл в другой файл, который включен в другой файл.

Позвольте мне перефразировать. Я хочу, чтобы core.php и init.php были включены в header.php, который включен во все остальные файлы. Как index.php и другие файлы, находящиеся в папках.

Могу ли я достичь этого, используя относительные пути к файлам?

+0

Если вы делаете включенные в включении в ... вы должны помнить, что относительные пути будут относиться к MAIN-файлу, который запустил все. Если 'index.php' включает' login', который включает 'header', то' ../ includes/header' в файле входа будет относиться к пути index.php, а не к логину. –

+1

Кроме того, я бы заменил 'include' и' include_once' на 'require_once' – hermann

+0

@hermann, include лучше для производительности, если вы управляете своими включенными .. как указано ниже в MueR –

ответ

0

Вы могли использовать относительные пути, но вы были бы гораздо лучше чтобы добавить в список $_SERVER['DOCUMENT_ROOT'] имена файлов, чтобы все было просто.

Update относительно вашего комментария:

$_SERVER['DOCUMENT_ROOT'] предоставляет вам путь WebRoot в переменной.

$doc_root = $_SERVER['DOCUMENT_ROOT']; 
include $doc_root . '/includes/whatever.php'; 

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

+0

Я действительно не понимаю $ _SERVER ['DOCUMENT_ROOT'] и как он работает. Как его включить.Я читал в Интернете, но это не имело большого значения для меня или, вероятно, не было правильно объяснено. Как вы работаете с $ _SERVER ['DOCUMENT_ROOT']? – Tauciokas

+0

@webAwwards: см. Обновленный ответ. –

0

header.php

include("../classes/init.php"); 
include("../classes/core.php"); 

login.php

include("../includes/header.php"); 

..и так далее ..

+1

Изменить' include ('../') 'с' require_once '../' '. – MueR

+0

@MueR, require_once не так круто, как вы думаете, это оболочка для включения, которая делает проверки сначала, и поэтому на самом деле медленнее, чем управление вашим включением себя. –

+0

Но включить что-то вроде подключения к базе данных и сеансовых массивов с кукисами, вы бы не требуется require_once? Будет включать работу? – Tauciokas

Смежные вопросы