Разница между $ _SERVER ['DOCUMENT_ROOT'] и $ _SERVER ['HTTP_HOST']

Я вернулся с простым вопросом (или связанным с ним вопросом).

Вопрос прост, но я еще не получил ответа. Я спросил многих людей с различным опытом работы на PHP. Но я получаю ответ: "Я понятия не имею, я никогда об этом не думал". Используя Google, я не смог найти статью об этом. Надеюсь, что здесь я получу удовлетворительный ответ.

Итак, вопрос:

В чем разница между $_SERVER['DOCUMENT_ROOT'] и $_SERVER['HTTP_HOST']?

Есть ли преимущества одного над другим?

Где мы должны использовать HTTP_HOST и где использовать DOCUMENT_ROOT?

Ответ 1

DOCUMENT_ROOT

Корневой каталог этого сайта, определенный директивой DocumentRoot в разделе "Общие" или разделе, например

DOCUMENT_ROOT=/var/www/example 

HTTP_HOST

Основной URL-адрес хоста, например

HTTP_HOST=www.example.com 

Корень документа - это локальный путь к вашему сайту, на вашем сервере; Http-хост - это имя хоста сервера. Они довольно разные; возможно, вы можете уточнить свой вопрос?

Редактировать: Вы сказали:

Случай 1: заголовок ('Местоположение:'. $ _SERVER ['DOCUMENT_ROOT']. '/abc.php').

Случай 2: заголовок ('Местоположение:'. $ _SERVER ['HTTP_HOST']. '/abc.php').

Я подозреваю, что первый будет работать только в том случае, если вы запустите браузер на том же компьютере, который обслуживает страницы.

Представьте, если кто-то другой посетит ваш сайт, используя свою машину Windows. И ваш веб-сервер сообщает им в заголовках HTTP: "Эй, действительно, перенаправить это местоположение: /var/www/example/abc.php". Что вы ожидаете от пользовательской машины?

Теперь, если вы говорите о чем-то вроде

<?php include($_SERVER['DOCUMENT_ROOT'] . '/include/abc.php') ?>

против

<?php include($_SERVER['HTTP_HOST'] . '/include/abc.php') ?>

Это может иметь смысл. Я подозреваю, что в этом случае первое, вероятно, предпочтительнее, хотя я не PHP Guru.

Ответ 2

Э, какой вопрос? DOCUMENT_ROOT содержит путь к текущей сети, в моем случае /home/www. HTTP_HOST содержит testing.local, так как он работает на локальном домене. Разница очевидна, не так ли?

Я не могу понять, где вы можете обменять этих двух, так почему вы должны учитывать преимущества?

Ответ 3

HTTP_HOST предоставит вам URL-адрес хоста, например domain.com

DOCUMENT_ROOT предоставит вам абсолютный путь для корневого каталога документа на веб-сайте в файловой системе сервера, например /var/www/domain/

Кстати, вы пробовали посмотреть на PHP-руководство, в частности $_SERVER? Там все объяснено.

Ответ 4

<?php include($_SERVER['DOCUMENT_ROOT'] . '/include/abc.php') ?>

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

header('Location: '. $_SERVER['HTTP_HOST'] . '/abc.php')

следует использовать для гиперссылки

Ответ 5

если вам нужен путь к домену, например "example.com", вы можете использовать "HTTP_HOST", если вы хотите, чтобы путь к папке "/public_html/foldername/" можно использовать "DOCUMENT_ROOT",

Ответ 6

$_SERVER ['HTTP_HOST'] возвращает URL домена А.Г. www.example.com В то время как $_SERVER['DOCUMENT_ROOT'] возвращает крышу текущей сети.. Такие как

Ответ 7

$_SERVER ['HTTP_HOST'] определяется клиентом и может даже не быть установлен! Вы можете повторить запрос и скрыть заголовок для локального тестирования в инструментах разработчика, таких как Waterfox/Firefox. Вы должны определить, установлен ли этот заголовок и существует ли запрашиваемый хост (одна из самых первых вещей, которые вы делаете, даже перед тем, как начать отправку любого из ваших заголовков), в противном случае соответствующее действие - убить весь процесс и ответить HTTP 400 Bad Request. Это относится ко всем языкам программирования на стороне сервера.

$_SERVER['DOCUMENT_ROOT'] определяется сервером как каталог, в котором находится исполняемый скрипт. Примеры:

  • public_html/example.php = public_html/
  • public_html/test1/example.php = public_html/test1/

Имейте в виду, что если вы используете Apache, переписываете, что есть разница между $_SERVER['REQUEST_URI'] (запрошенный URL-адрес) и $_SERVER['PHP_SELF'] (файл, обрабатывающий запрос).