Разница между $ _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']
(файл, обрабатывающий запрос).