使用 Apache 时,PHP 中 DOCUMENT_ROOT 变量的尾部斜杠不一致

Tom*_*Tom 10 php configuration documentroot apache-2.2

在不同的服务器环境中,PHP $_SERVER['DOCUMENT_ROOT']super global 有时尾部有斜线,有时没有。我原以为这个问题与文件中ApacheDocumentRoot的定义方式直接相关httpd.conf

即我会认为如果不httpd.conf包含尾部斜杠:

<VirtualHost *:8880>
    DocumentRoot /var/www/live/current
    ...
Run Code Online (Sandbox Code Playgroud)

然后echo $_SERVER['DOCUMENT_ROOT']应该给/var/www/live/current

如果httpd.conf确实包含尾部斜杠:

<VirtualHost *:8880>
    DocumentRoot /var/www/live/current/
    ...
Run Code Online (Sandbox Code Playgroud)

然后echo $_SERVER['DOCUMENT_ROOT']应该给/var/www/live/current/

在 Ubuntu 10.04 上就是这种情况,但在 RHEL 5.5 上,$_SERVER['DOCUMENT_ROOT']即使在 Apache 上没有定义任何斜杠,也会添加尾部斜杠。

知道为什么会这样吗?是否有我遗漏的配置参数?


以供参考:

  • RHEL 的 PHP 5.3.3(出现问题):PHP 5.3.3 (cli)(构建时间:2010 年 7 月 23 日 16:26:53)
  • Ubuntu 的 PHP 版本(没有问题):PHP 5.3.2-1ubuntu4.2 with Suhosin-Patch (cli)(构建时间:2010 年 5 月 13 日 20:03:45)

Dom*_*Dom 6

我不知道为什么您的虚拟主机之间的斜线会发生变化。顺便说一句,重要吗?只需在您的程序中添加一个新斜杠(如果存在双斜杠,请删除),问题就解决了。

我用

$realpath = realpath ($_SERVER['DOCUMENT_ROOT']."/");
$realpath = str_replace ("//", "/", $realpath);
Run Code Online (Sandbox Code Playgroud)

  • 你可以简单地使用``$realpath = realpath($_SERVER['DOCUMENT_ROOT']);``。它会自动删除所有多个斜杠以及尾随的斜杠。如果你总是想要一个尾部斜杠将它连接到上面调用 ``realpath()`` 的结果。不在里面。 (4认同)