2011-01-08 174 views
1

我開發和部署各種PHP應用程序到不同的環境。特別是在開發環境中,它們可以在任何地方,從document_root到/ Users/me/Sites /甚至/ Users/me/Sites/someapp/PHP:如何從用戶目錄中獲取文檔根目錄?

在這些應用程序中,我需要知道'application root'一次作爲真正的路徑,一次作爲URL。路徑沒有問題。比方說,我有一個bootstrap.php中的應用程序根目錄下,其作用:

define("BASE_DIR", realpath(dirname(__FILE__))); 

不過,我有問題要得到可靠的基礎URL。在大多數環境中簡單地從BASE_DIR減去文檔根目錄的工作原理:

define("BASE_URL", str_replace($_SERVER['DOCUMENT_ROOT'],'',BASE_DIR) . "/"); 

現在,我的問題是:在我的應用在於我的用戶目錄中,因爲PHP仍然可以看到主文檔根這不會對環境下工作。有沒有人解決過這個問題?

+0

可能重複的[如何找到應用程序的基本url?](http://stackoverflow.com/questions/176712/ how-can-i-find-an-applications-base-url) – alexn 2011-01-08 16:36:09

+0

謝謝,但我只是嘗試瞭解決方案,它的結果取決於文件的位置,包括給定的代碼。 – Stefan 2011-01-08 16:44:22

回答

4

任何涉及realpath()和DOCUMENT_ROOT的問題都會在服務器配置了別名時失敗。考慮一下Apache的配置是這樣的:

DocumentRoot /home/httpd/html 
Alias /testalias /home/otherdir 

然後你訪問腳本example.com/testalias/script.php

該腳本將返回:

realpath(dirname(__FILE__)) -> /home/otherdir 
$_SERVER['DOCUMENT_ROOT'] -> /home/httpd/html 
BASE_DIR -> /home/otherdir 
BASE_URL -> /home/otherdir/ 

,但該網站的其餘部分在/home/httpd/html

確實存在你可能有更好的運氣重建基於$_SERVER['SCRIPT_NAME']的URL,這是路徑/腳本名稱部分網址:

$_SERVER['SCRIPT_NAME'] -> /testalias/script.php