Вопрос по PHP-Includes на сайте

T1
На сайте с 10.01.2018
Offline
1
665

Коллеги, приветствую! Вопрос следующий. На своём личном веб-сайте использую РНР-Инклуды по типу:


<?php
include "blocks/header.inc.php";
?>

Возник вопрос - в вышеуказанном примере кода я подключаю внешние файлы (шапка, подвал, меню и т.д.) с помощью относительного адреса, то есть адреса именно относительно документа сайта, из которого собственно я и подключаю (инклудю) данный внешний файл. Вопрос: как сделать так, чтобы можно было указывать адрес не относительно конкретного документа сайта, а именно адрес относительно корня сайта? Иными словами, если вдруг я потом этот документ на своём сайте переложу в иное (другое) место, чтобы у меня не слетели инклуды? А автоматически всё равно бы работали от корня сайта... То есть, абсолютно аналогично как с графикой, если мы работаем под сервером и можем легко писать путь наподобие: "/images/bg.jpg", - относительный адрес от корня сайта.

Вот, посмотрел этот вопрос на официальном сайте php.net

В комментариях люди предлагают такой вариант:


This might be useful:
<?php
include $_SERVER['DOCUMENT_ROOT']."/lib/sample.lib.php";
?>
So you can move script anywhere in web-project tree without changes.

Что кто может посоветовать по данному вопросу? Заранее благодарен!

LEOnidUKG
На сайте с 25.11.2006
Offline
1775
#1

include_once (dirname(__FILE__).'/header.php');

Так?

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
AS
На сайте с 12.12.2017
Offline
6
#2

Можно dirname(__DIR__)

include (dirname(__DIR__)."/lib/sample.lib.php");
dma84
На сайте с 21.04.2009
Offline
168
#3
LEOnidUKG:
include_once (dirname(__FILE__).'/header.php');

Так?

Нет, относительно корня сайта - это DOCUMENT_ROOT


define('ROOT', getenv('DOCUMENT_ROOT'));

include_once ROOT.'/lib/file.php';


---------- Добавлено 31.01.2018 в 23:49 ----------

AutoSearches:
Можно dirname(__DIR__)
include (dirname(__DIR__)."/lib/sample.lib.php");

Это пять)))

Я понимаю dirname(__FILE__), но dirname(__DIR__) - у меня слов нет.

S
На сайте с 30.09.2016
Offline
469
#4

Как вариант - задать корень в конфигурационном файле.

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
LEOnidUKG
На сайте с 25.11.2006
Offline
1775
#5

Лучше сразу продумать иерархию и не мучатся потом.

Пусть будет больше папок, зато всё по своим местам.

N
На сайте с 01.12.2006
Offline
102
#6

Если у Вас есть возможность подключить composer в нем можно организовать автоматическую загрузку файлов, классов и их мапинг. Потом в одном месте подключите autoload.php и будет все работать.

dimsog
На сайте с 08.08.2011
Offline
149
#7

1) $_SERVER['DOCUMENT_ROOT'] webroot папка вашего сайта, которую вы указываете в Nginx или Apache. Не работает в режиме php-cli!

Использовать можно. но на свой страх и риск.

2) Рекомендованный способ использовать __DIR__, к примеру:


require (__DIR__ . '/somefolder/somefile.php');

__DIR__ дает полный путь от корня файловой системы к текущей директории файла,

к примеру, require находится в файле /var/www/site.ru/index.php, тогда __DIR__ будет

/var/www/site.ru. (без косой черты в конце), а полный путь к файлу somefile.php будет:

/var/www/site.ru/somefolder/somefile.php

И подключайте через require, чтобы у вас был fatal error, если файл не найден. Include слишком мягкий в этом плане.

Можно dirname(__DIR__)

Это была шутка? AutoSearches? :)

nikonor, на серче это не модно:)

ihor vps -> ihc.ru
T1
На сайте с 10.01.2018
Offline
1
#8
LEOnidUKG:
Лучше сразу продумать иерархию и не мучатся потом.
Пусть будет больше папок, зато всё по своим местам.

Мудрые слова, спасибо вам, буду действительно думать над иерархией документов на сайте, это очень важно.

Уважаемые коллеги, спасибо за ваши комментарии и ответы!

Буду дальше работать над своим сайтом... Ещё раз выражаю благодарность вам за отзывы, приятно, когда есть такое большое сообщество. Спасибо.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий