Apache-2.2
使用 Apache 時 PHP 中 DOCUMENT_ROOT 變數中的斜杠不一致
在不同的伺服器環境中,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 應該指定不帶斜杠。