2010-02-01 92 views
0

好的说我有包含在一个文件夹/ myProgram一个代码库/和具有不同的文件夹,如/ myProgram/lib中/,/ myProgram /文档/等...PHP5 CLI制定基本目录的最佳方式是什么?

如何在PHP中,我可以在/ myProgram /之前检测任何文件夹,并创建一个基本变量,这样我的includes和require就可以相对于基本目录/ myProgram /写入,这样我就可以将myProgram放入任何东西,比如根目录,我的主目录,/ path /到/ myProgram /,等等?

不需要在windows中工作,只需一个* nix环境。这全部来自命令行解析器或可执行脚本。

回答

0

这是我是如何做到的......正是我想要的!一些玩过我的程序后发现它。

// START Directory Bootstrap 
$location = dirname(__FILE__); 
$rootLoc = strpos($location, "myProgram"); 
if($rootLoc === FALSE) 
    die("WARNING! myProgram Root Directory Not Found!\n"); 
$root = substr($location, 0, $rootLoc); 
$root .= "myProgram"; 
// Change Directory for working includes and requires. 
chdir($root); 

此处定位启动脚本的位置,然后尝试查找基础目录。如果找不到基础“myProgram”,我认为脚本被放置在错误的位置,并且需要失败。否则,它会创建一个到myProgram的子字符串,然后在最后加上myProgram。最后,我们将目录更改为允许包括和要求,如...

include_once("config/serverSettings.php"); 
require_once("config/mySQLSettings.php"); 

法律命令。这就是我一直在寻找的东西,最后我决定将它上传给其他人看。

+0

假设你像我一样使用chdir命令,就可以通过使用“config/mySQLSettings.php”来访问/ path/to/myProgram/config /。 – Urda 2010-02-03 14:11:54

+0

如果我将程序移动到'/ path/to/my_program /',会发生什么情况,因为我碰巧喜欢这种命名结构? – 2010-03-07 12:06:45

+0

只需更改'$ rootLoc = strpos($ location,“myProgram”);'to'$ rootLoc = strpos($ location,“my_program”);'更新'$。=“myProgram”;'to'$ root 。=“my_program”;'在引导程序中基本上将'myProgram'的所有​​引用更新为'my_program'。 – Urda 2010-03-07 14:18:31

0

我会建议使用从当前文件的相对路径,像这样:

include (dirname(__FILE__).'/../includes/something.inc.php'); 

这避开硬编码可能会改变一个目录名。作为一个好处,这应该适用于任何系统。

你也可以做类似这样的东西:

// In MyProgram/includes/config.php for instance: 
define("BASE_DIR", realpath(dirname(__FILE__).'/../..'); 

然后你就可以使用以下方法:

include(BASE_DIR.'/includes/class.php'); 

我会强烈建议针对包括硬编码的目录名的任何解决方案你的应用程序是在。

+0

无论如何,我可以解决它吗?我真的想建立包括,并要求从根目录myProgram了。就像$ HOME/myProgram/...设置。 – Urda 2010-02-02 00:09:34

+0

@Urda:查看我的编辑。 – 2010-02-02 08:34:24

相关问题