Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2015, 17:18   #1
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию Как правильно include файлы?

Для подключения файла со страницы, находящейся в корне, используется код

Код:
include("files/catalog.php");
Но в подключаемом файле также имеется инклуд, подключающий другой файл

Код:
include ("../admin/config.php");
Все нормально работает, а проблема возникает, если первый файл нужно подключить к странице, находящейся не в корне, а в какой-то другой директрии. В этом случае для подключения используется код, учитывающий глубину вложения. Например:

Код:
include("../files/catalog.php");
Однако, со вторым файлом возникает ошибка адреса подключения базы.

Есть ли какие-то универсальное решение, позволяющее инклудить файл catalog.php из любого каталога и чтобы не возникало проблем с подключением базы?
Dux вне форума Ответить с цитированием
Старый 17.03.2015, 18:04   #2
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Dux Посмотреть сообщение
Есть ли какие-то универсальное решение, позволяющее инклудить файл catalog.php из любого каталога и чтобы не возникало проблем с подключением базы?
Есть такое решение: указывать абсолютные пути к подключаемым файлам – а не относительные, как сейчас.
Различие между абсолютными и относительными путями
Andkorol вне форума Ответить с цитированием
Старый 17.03.2015, 18:07   #3
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
Есть такое решение: указывать абсолютные пути к подключаемым файлам – а не относительные, как сейчас.
Различие между абсолютными и относительными путями
Если указывать полный путь с http - выходит ошибка include() [function.include]: URL file-access is disabled in the server configuration in

Последний раз редактировалось Dux; 17.03.2015 в 18:12.
Dux вне форума Ответить с цитированием
Старый 17.03.2015, 18:13   #4
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

А с этим способом какие проблемы?
Определил константу, значением которой является абсолютный путь к корню сайта – и дальше просто используй эту константу для подключения любых файлов из любой директории:
PHP код:
include (ROOT '/admin/config.php'); 
Цитата:
Сообщение от Dux Посмотреть сообщение
Если указывать полный путь с http - выходит ошибка include() [function.include]: URL file-access is disabled in the server configuration in
http никакого отношения к абсолютному пути не имеет.

Последний раз редактировалось Andkorol; 17.03.2015 в 18:15.
Andkorol вне форума Ответить с цитированием
Старый 17.03.2015, 18:17   #5
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию

Цитата:
Определил константу, значением которой является абсолютный путь к корню сайта
Подскажите пожалуйста пошагово как это сделать? Как присвоить Root адрес сайта?
Dux вне форума Ответить с цитированием
Старый 17.03.2015, 18:54   #6
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

У тебя есть точка входа – основной скрипт, к которому происходит обращение при запросах.
Например, это index.php в корне сайта.
Точек входа может быть несколько:
/index.php – точка входа для сайта
/forum/index.php – точка входа для форума
/catalog/index.php – точка входа для каталога товаров

В каждой из этих точек тебе нужно определить константу ROOT, которая содержит абсолютный путь к корню сайта.
При этом важно не допустить попытки переопределения константы – это вызовет ошибку.

Определяем абсолютный путь в файле, расположенном в корневой директории сайта (/index.php) – используем магическую константу __FILE__:
PHP код:
if(!defined('ROOT')) define('ROOT'dirname(__FILE__)); 
Определяем абсолютный путь в файлах, расположенных в директориях сайта первого уровня (/forum/index.php и /catalog/index.php) – здесь и далее используем магическую константу __DIR__:
PHP код:
if(!defined('ROOT')) define('ROOT'dirname(__DIR__)); 
Второго уровня (/forum/new/index.php):
PHP код:
if(!defined('ROOT')) define('ROOT'dirname(dirname(__DIR__))); 
Третьего уровня (/forum/new/test/index.php):
PHP код:
if(!defined('ROOT')) define('ROOT'dirname(dirname(dirname(__DIR__)))); 
Принцип вложенности, я думаю, здесь понятен: при добавлении уровня вложенности – оборачиваем значение константы в ещё один вызов dirname().

Чтоб не морочить себе голову, тыкая определения константы в десяти разных скриптах на разных уровнях вложенности – кроме точек входа константу также можно определить в любом единственном файле, который точно будет использоваться во всех этих точках входа.
Например, в конфиге (если он является .php файлом, само собой).
Andkorol вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как правильно хранить файлы в access? Konstantin_ua БД в Delphi 2 19.01.2015 15:00
Как правильно сделать include? Delphinchik PHP 5 13.10.2010 17:40
как мне правильно выложить HTML файлы dazzz HTML и CSS 3 15.07.2010 15:06
как правильно сжимать запускные файлы? Bogood Софт 4 29.10.2008 21:35
СИ не может найти include файлы! Abbatik Помощь студентам 4 14.12.2007 02:03