2010-01-25 81 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