我一直在使用$ _SERVER [「DOCUMENT_ROOT」]環境變量來引用我的應用程序中的公共根。現在我意識到這不是很可靠。我正在考慮一種方法,我在index.php中基於魔術常數定義一個常量。類似的東西:參考PHP中的公共根 - 最佳實踐
define("PUBILC", __DIR__."/");
雖然我不確定。
你會推薦什麼方法?
我一直在使用$ _SERVER [「DOCUMENT_ROOT」]環境變量來引用我的應用程序中的公共根。現在我意識到這不是很可靠。我正在考慮一種方法,我在index.php中基於魔術常數定義一個常量。類似的東西:參考PHP中的公共根 - 最佳實踐
define("PUBILC", __DIR__."/");
雖然我不確定。
你會推薦什麼方法?
如果一切請求都通過你的index.php,那麼定義一個常量就會有一個很好用的想法。我也看到了使用(虛擬)主機配置或.htaccess定義環境變量的設置,但我認爲它不太透明且不便於攜帶。通常會使用設置變量中的硬編碼路徑,但不會自動更改,然後人們會希望。總而言之,我同意你的想法。
絕對沒有$_SERVER['DOCUMENT_ROOT']
分散在整個應用程序中。 Apache可以配置爲使用VirtualDocumentRoot
,它將文檔根目錄設置爲該目錄,但而不是更改DOCUMENT_ROOT環境變量,這可能導致網站被破壞。
根據您的方法,我喜歡在我的應用程序的頂部定義DOC_ROOT
,並在需要引用文檔根目錄的任何位置使用它。
你可以做類似的事情,但把它放在一個常見的include文件中,它包含在你所有的頁面中。這適用於直接訪問您網站上的頁面而不經過主索引頁面的訪問者。
例如,如果你在你的文件夾doc_root/inc
了utilities.php
,它被包含在所有的網頁中,它可能是這個樣子:
<?php
function GetDocumentRoot()
{
return dirname(dirname(__FILE__));
}
function WriteHeader()
{
//...
}
// more utility functions...
?>
在一個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或服務器上擁有相同的項目。
非常感謝!還有一個問題,如果我可以。你認爲什麼是一個不斷提及公共根源的準確短名稱?我不確定「公開」。 – 2010-06-08 16:17:52
是的,所有請求都經過我的index.php。 – 2010-06-08 16:28:50
YOURAPPNAME_ROOT將是最適用的,並且與其他包中定義的另一個常量的更改最少。假設你的項目有一個相對獨特的名字。 – Wrikken 2010-06-08 16:28:56