2010-06-08 50 views
2

我一直在使用$ _SERVER [「DOCUMENT_ROOT」]環境變量來引用我的應用程序中的公共根。現在我意識到這不是很可靠。我正在考慮一種方法,我在index.php中基於魔術常數定義一個常量。類似的東西:參考PHP中的公共根 - 最佳實踐

define("PUBILC", __DIR__."/"); 

雖然我不確定。

你會推薦什麼方法?

回答

2

如果一切請求都通過你的index.php,那麼定義一個常量就會有一個很好用的想法。我也看到了使用(虛擬)主機配置或.htaccess定義環境變量的設置,但我認爲它不太透明且不便於攜帶。通常會使用設置變量中的硬編碼路徑,但不會自動更改,然後人們會希望。總而言之,我同意你的想法。

+0

非常感謝!還有一個問題,如果我可以。你認爲什麼是一個不斷提及公共根源的準確短名稱?我不確定「公開」。 – 2010-06-08 16:17:52

+0

是的,所有請求都經過我的index.php。 – 2010-06-08 16:28:50

+0

YOURAPPNAME_ROOT將是最適用的,並且與其他包中定義的另一個常量的更改最少。假設你的項目有一個相對獨特的名字。 – Wrikken 2010-06-08 16:28:56

2

絕對沒有$_SERVER['DOCUMENT_ROOT']分散在整個應用程序中。 Apache可以配置爲使用VirtualDocumentRoot,它將文檔根目錄設置爲該目錄,但而不是更改DOCUMENT_ROOT環境變量,這可能導致網站被破壞。

根據您的方法,我喜歡在我的應用程序的頂部定義DOC_ROOT,並在需要引用文檔根目錄的任何位置使用它。

0

你可以做類似的事情,但把它放在一個常見的include文件中,它包含在你所有的頁面中。這適用於直接訪問您網站上的頁面而不經過主索引頁面的訪問者。

例如,如果你在你的文件夾doc_root/incutilities.php,它被包含在所有的網頁中,它可能是這個樣子:

<?php 
function GetDocumentRoot() 
{ 
    return dirname(dirname(__FILE__)); 
} 

function WriteHeader() 
{ 
    //... 
} 

// more utility functions... 
?> 
0

在一個OS我的項目我已通過下面的代碼(和一些額外的)一個配置:

// set the root directory for the files 
define('ROOT_DIR', "/path/to/my/htdocs/project_name/"); 
// set the root path for URLs 
define('ROOT_PATH', "http://".$_SERVER['HTTP_HOST']."/project_name/"); 

中的每一個PHP文件,然後我包括此config.php文件使用此行:

require_once($_SERVER['DOCUMENT_ROOT'].'/config_project_name.php'); 

正如您可以看到使用配置文件的前綴,您可以將它們全部放入根目錄,並且您仍然足夠靈活,可以在不同的PC或服務器上擁有相同的項目。