我回答了一个简单的问题(或相关问题)。
问题很简单,但我还没有收到答案。我问过很多人在PHP方面有不同的经验。但我得到的回应是:“我什么都不知道。我从来没有想过这个。”使用Google我无法找到任何关于此的文章。我希望我能在这里得到满意的答案。
所以问题是:
$_SERVER['DOCUMENT_ROOT']
和$_SERVER['HTTP_HOST']
之间的区别是什么?
一个人有什么优势吗?
我们应该在哪里使用HTTP_HOST&在哪里使用DOCUMENT_ROOT?
答案 0 :(得分:29)
<强> 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') ?>
VS
<?php include($_SERVER['HTTP_HOST'] . '/include/abc.php') ?>
这可能有意义。我怀疑在这种情况下,前者可能是首选,虽然我不是PHP大师。
答案 1 :(得分:3)
DOCUMENT_ROOT
包含当前网络的路径,在我的情况下为/home/www
。 HTTP_HOST
包含testing.local
,因为它在本地域上运行。差别很明显,不是吗?
我无法弄清楚你可以在哪里交换这两个,那你为什么要考虑优势呢?
答案 2 :(得分:3)
HTTP_HOST
会为您提供主机的网址,例如domain.com
DOCUMENT_ROOT
将为您提供在服务器文件系统中记录网站根目录的绝对路径,例如/var/www/domain/
$_SERVER
?一切都在那里得到解释。
答案 3 :(得分:2)
<?php include($_SERVER['DOCUMENT_ROOT'] . '/include/abc.php') ?>
应该用于将文件包含在另一个文件中。
header('Location: '. $_SERVER['HTTP_HOST'] . '/abc.php')
应该用于超链接
答案 4 :(得分:1)
如果您想要&#39; example.com&#39; 等域名路径,则可以使用&#34; HTTP_HOST&#34; 如果您想要文件夹&#39; / public_html / foldername /&#39; 路径,您可以使用 &#34; DOCUMENT_ROOT&#34;
答案 5 :(得分:0)
$_SERVER ['HTTP_HOST']
返回域网址
a.g. www.example.com
而$_SERVER['DOCUMENT_ROOT']
返回当前网络的屋顶。
如
答案 6 :(得分:0)
$_SERVER ['HTTP_HOST']
由 client 定义,甚至可能没有设置!您可以重复请求并保留标头,以在开发人员工具(如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']
(处理请求的文件)之间的区别。
答案 7 :(得分:0)
John Ledbetter完美地提出了标题问题。
此遮篷旨在扩展并提供有关原始海报内部关注点的其他信息:
跟随我的遮阳篷:
您还可以利用 DOCUMENT_ROOT 获得子站点的根目录,而不是主机。
{{1}}
答案 8 :(得分:0)
其他答案都暗示了这一点,但是我想添加一个答案只是要尖锐地像灰熊的牙齿一样-请勿信任$_SERVER['HTTP_HOST']
,因为以下代码确实安全:
<?php
header('Location: '. $_SERVER['HTTP_HOST'] . '/abc.php');
#Or
include($_SERVER['HTTP_HOST'] . '/include/abc.php');
?>
该变量受传入请求的操纵,可能有助于利用。这可能取决于您的服务器配置,但是您不希望为您填写此变量:)
另请参阅: