2010-10-06 50 views
0

我在PHP中定義的絕對路徑有一些問題。 我定義了SITE_ROOTAPP_PATH像這樣:PHP中本地主機在OS X中的絕對路徑問題

defined('SITE_ROOT') ? null : 
define('SITE_ROOT', str_replace('//','/',dirname(__FILE__))); 

defined('APP_PATH') ? null : define('APP_PATH', SITE_ROOT.DS.'application'); 

當像這樣的應用程序中使用APP_PATH

echo APP_PATH; 

...這是我所得到的

/Users/user/Sites/MyWebsite/application 

我想是輸出爲:

localhost/application 

是否有這樣做的任何非缺憾呢?

我的用例是使用APP_PATH(已用於做所有我require()的)與HTML呼應,以避免在URL中的相對路徑功能問題,爲href的。

回答

1

__FILE__常量包含文件路徑,沒有別的。查看$_SERVER['REQUEST_URI'] and $_SERVER['HTTP_HOST']以找出用於調用腳本的URL。這是環境信息,必須由啓動PHP腳本的Web服務器(例如Apache)提供,這不是PHP固有的知識。

+0

太好了,謝謝!既然我的計劃是將這些代碼輕鬆地從我的本地開發環境移植到我的prod環境中,您是否會建議建立兩條獨立的路徑?一個會使用'$ _SERVER ['HTTP_HOST']'和上面提到的另一個。或者這種方法有什麼問題嗎?如果您跨多個服務器部署,是否有任何潛在的問題? – 2010-10-06 06:34:40

+0

@Josh首先,你不應該在你的鏈接中包含主機,而是使用沒有主機的絕對路徑(即'/ application/page/foo')。這解決了相對的URL問題,而不會過分複雜。其次,它確實取決於你的應用程序如何優雅地做到這一點。如果您使用的是Dispatcher模型(總是調用一個特定的.php文件,該文件會將請求分派給其他文件),那麼確定「您在哪裏」相對比較簡單,因此您無需執行任何特定於系統的配置。看看任何流行的PHP框架的例子。 – deceze 2010-10-06 06:41:13

+0

我有一個initialize.php文件,可以完成我認爲你在說的內容。我非常肯定'$ _SERVER ['HTTP_HOST']'只是做我應該在初始化文件中手動輸入的內容。然後,我可以使用「VIEW_URL」路徑來訪問視圖。現在試着看看。 – 2010-10-06 06:43:52

0

我錯在想你可以使用:

$path = str_replace("/Users/user/Sites/MyWebsite", "localhost",$appPath); 
echo($path); 
//returns: localhost/application 

批評歡迎。