2010-01-25 59 views
0

我一直在研究內容管理系統(nakid),我最棘手的挑戰之一是文件導航。我想確保文件路徑和設置在本地和遠程服務器上工作。現在我的設置是相當多這樣的:PHP文件導航(本地+遠程)

first.php(所有頁面使用):

//Set paths to nakid root 
$core['dir_cur'] = dirname(__FILE__); 
$core['dir_root'] = $_SERVER['DOCUMENT_ROOT']; 
//Detect current nakid directory 
$get_dirnakid_1 = str_replace("\\","/",dirname(__FILE__));//If on local 
$get_dirnakid_2 = str_replace("/includes/php","",$get_dirnakid_1); 
$get_dirnakid_3 = str_replace($_SERVER['DOCUMENT_ROOT'],"",$get_dirnakid_2); 
//remove first "/" 
if(substr($get_dirnakid_3, 0,1) == "/"){ 
$get_dirnakid_3 = substr($get_dirnakid_3, 1); 
} 
//Set some default vars 
$core['dir_nakid_path'] = $get_dirnakid_3; 
$core['dir_nakid'] = $core['dir_root']."/".$core['dir_nakid_path'];//We need to get system() for this real value - below 

的原因我也沒有這樣說是因爲我想要的目錄,此計劃是坐在服務器上的任何地方,即(/ nakid)(/ cms)(/ admin/cms)

我很積極我正在做一些錯誤的方式,或者有一個更簡單的方法來照顧所有這個。

如果它有助於獲得的代碼定睛一看,是如何被使用的一切,我有這一切在nakid.org

編輯:剛剛意識到我在nakid.org什麼比略有不同我新發布的代碼,但同樣的想法仍然適用於我正在嘗試做的事情。

回答

1

總的來說,它看起來還好我。

你可能想給這個變量的宣告名字

記得在路徑名轉換\/(如nakid_root_dirnakid_relative_webroot等。):當你匹配另一個目錄名其中之一設置,你也需要str_replace("\\","/"...)

雖然我不明白你的目標是什麼,但是$get_dirnakid_2。如果我將你的應用程序安裝在一個名爲/etc/includes/php/nakid的目錄中,爲什麼你會搞砸我的路徑?

無論如何,你應該使這些設置用戶也可以覆蓋。有時,用戶可能希望設置與您從DOCUMENT_ROOT和配偶中獲得的設置不同的設置。

+0

我使用/ includes/php作爲了解安​​裝路徑的方式(first.php位於/ includes/php中)。我應該以不同的方式做到這一點嗎? – kilrizzy 2010-01-25 16:17:22

+0

我確實有辦法讓用戶更改系統中的路徑,但是這個初始設置是在發生任何事情之前 – kilrizzy 2010-01-25 16:18:27

+0

事後纔想到,如果這是要發佈的軟件,您可能需要刪除「本地「和」遠程「,因爲它們通常並不反映你正在做的事情(反斜槓是Windows機器上的目錄分隔符,在Unix/Linux和其他系統上是斜線),但它也可能是相反的,一臺Windows機器是「遠程」服務器)。 – 2010-01-25 16:18:39