PHP5 CLI制定基目录的最佳方法?

时间:2010-02-01 21:15:10

标签: linux php

好的说我有一个包含在文件夹/ myProgram /中的代码库,并且有各种文件夹,例如/ myProgram / lib /,/ myProgram / docs /等等......

如何在PHP中,我可以在/ myProgram /之前检测任何文件夹并创建一个基本变量,这样我的包含和require可以相对于基本目录/ myProgram /编写,允许我将myProgram放在诸如root之类的任何内容中,我的家庭目录,/ path / to / myProgram /,依此类推?

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

2 个答案:

答案 0 :(得分: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');

我强烈反对任何涉及硬编码应用程序所在目录名称的解决方案。

答案 1 :(得分: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");

法律命令。这就是我想要的,我最终决定将其上传给其他人看。