文档根目录 PHP

35

只是确认一下,使用以下代码是否正确:

$_SERVER["DOCUMENT_ROOT"]

与在HTML中使用“/”相同。

例如,如果当前文档为:

folder/folder/folder/index.php

我可以在HTML中使用<base>来从根目录开始:

/somedoc.html

而在 PHP 中,我要使用以下代码实现相同的功能:

$_SERVER["DOCUMENT_ROOT"] . "/somedoc.html";

这样正确吗?有更简单的方法吗?

4个回答

46
<a href="<?php echo $_SERVER['DOCUMENT_ROOT'].'/hello.html'; ?>">go with php</a>
    <br />
<a href="/hello.html">go to with html</a>

尝试自行操作,您会发现它们并不完全相同。

$_SERVER['DOCUMENT_ROOT'] 会呈现出实际的文件路径(在我的电脑上运行为自己的服务器,则是 C:/wamp/www/)。

HTML 中的 / 会呈现出服务器网址的根目录,在我的情况下则是 localhost/

但是,C:/wamp/www/hello.htmllocalhost/hello.html 实际上是同一个文件。


1
如果你想用它来包含(include()),那就是一个不同的问题,而不是用于超链接。 - user557846
没必要发表我的答案,因为这个已经是我要说的了。 - Joe C.
包含(include)有什么不同之处? - Andrew
3
DOCUMENT_ROOThello.html之间需要一个斜杠/ - sachleen
文件路径和URL并不是同一回事。 - user557846

5

/指的是从公共html文件夹中引用您网站的根目录。 DOCUMENT_ROOT指的是包含您网站的文件夹在服务器上的本地路径。

例如,我在一台计算机上安装了EasyPHP ...

$_SERVER["DOCUMENT_ROOT"]给我file:///C:/Program%20Files%20(x86)/EasyPHP-5.3.9/www,但任何我只使用/链接的文件将相对于我的www文件夹。

如果您想从服务器的根目录为文件提供绝对路径,则可以使用DOCUMENT_ROOT。 如果您想从您网站的根目录为文件提供绝对路径,请只使用/


2
是的,$_SERVER['DOCUMENT_ROOT'] 包含了与客户端URL路径 / 相对应的服务端路径。但是,它们不能互换使用。
它们之所以不能互换使用,是因为例如,服务端路径不应该被发送到客户端(HTML)端。 $_SERVER['DOCUMENT_ROOT'] 的值不是 /; 它是服务器本地文件路径,指向服务器在 / 这个位置展示给客户端的文件。 因此,在可从客户端路径 http://example.com/images/thumbnail.png 访问位于服务器上该路径的本地文件时,${$_SERVER['DOCUMENT_ROOT']}/images/thumbnail.png" 的值可能是字符串 /var/www/html/images/thumbnail.png
请注意:$_SERVER['DOCUMENT_ROOT'] 不包括结尾的 /

在服务器端,$_SERVER['DOCUMENT_ROOT'] 相当于 / ,但在客户端则不同。这种表述最好避免使用,因为可能会引起歧义或误导。在 HTML 中,永远只需使用简单的斜杠 / 即可,而不应该使用 $_SERVER['DOCUMENT_ROOT'] 作为参考地址。 - Martin
我已经将澄清语句移至初始语句中,并对结果进行了清理,以尝试减轻您(https://stackoverflow.com/users/3536236/martin)所看到的歧义。 - timeSmith

-4

最简单的方法是拥有良好的站点结构并将其编写为常量。

DEFINE("BACK_ROOT","/var/www/");

1
我知道这很老,但我偶然发现了这个问题,如果你已经有一个定义在PHP服务器中的常量来完成这个任务,为什么还要创建更多的常量呢?这样只会浪费代码、CPU和内存。 - DarkMukke
这个想法是,无论你在包含文件中有多深(文件夹层次),这样做可以确保你永远不必编写相对于脚本的代码,除了用于定义根目录的代码之外。我使用这种方法来对抗许多程序员今天使用的拼凑方法。 - Adam Fowler
12
是的,但这样你的脚本就会依赖于特定的系统或位置,这是不应该出现的。应用程序应该是可移植的。 - DarkMukke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接