Apache-2.2

使用 Apache 時 PHP 中 DOCUMENT_ROOT 變數中的斜杠不一致

  • December 10, 2018

在不同的伺服器環境中,PHP$_SERVER['DOCUMENT_ROOT']超級全域有時會有一個斜杠,有時沒有。我原以為這個問題與文件DocumentRoot中定義Apache 的方式直接相關httpd.conf

即我會認為如果httpd.conf不包含斜杠:

<VirtualHost *:8880>
   DocumentRoot /var/www/live/current
   ...

然後echo $_SERVER['DOCUMENT_ROOT']應該給*/var/www/live/current*

如果httpd.conf確實包含斜杠:

<VirtualHost *:8880>
   DocumentRoot /var/www/live/current/
   ...

然後echo $_SERVER['DOCUMENT_ROOT']應該給*/var/www/live/current/*

$_SERVER['DOCUMENT_ROOT']在 Ubuntu 10.04 上就是這種情況,但在 RHEL 5.5 上,即使在 Apache 上沒有定義斜杠,也會添加斜杠。

知道為什麼會這樣嗎?是否有我缺少的配置參數?


以供參考:

  • RHEL 的 PHP 5.3.3(出現問題):PHP 5.3.3 (cli)(建構時間:2010 年 7 月 23 日 16:26:53)
  • Ubuntu 的 PHP 版本(沒問題):帶有 Suhosin-Patch (cli) 的 PHP 5.3.2-1ubuntu4.2(建構時間:2010 年 5 月 13 日 20:03:45)

我不知道為什麼斜線會在您的虛擬主機之間發生變化。順便說一句,重要嗎?只需在您的程序中添加一個新的斜杠(如果存在雙斜杠則刪除),問題就解決了。

我用

$realpath = realpath ($_SERVER['DOCUMENT_ROOT']."/");
$realpath = str_replace ("//", "/", $realpath);

http://httpd.apache.org/docs/2.0/mod/core.html說: DocumentRoot 應該指定不帶斜杠。

引用自:https://serverfault.com/questions/173977