Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux PHP5 CLI制定基本目录的最佳方法?_Linux_Php - Fatal编程技术网

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

Linux PHP5 CLI制定基本目录的最佳方法?,linux,php,Linux,Php,好的,假设我有一个代码库,它包含在/myProgram/文件夹中,并且有各种文件夹,比如/myProgram/lib/、/myProgram/docs/等等 在PHP中,如何在/myProgram/之前检测任何文件夹,并创建一个基变量,以便可以相对于基目录/myProgram/写入我的include和require,从而允许我将myProgram放置在根目录、my home dir、/path/to/myProgram/等任何目录中 不需要在windows中工作,只需要一个*nix环境。这些都来

好的,假设我有一个代码库,它包含在/myProgram/文件夹中,并且有各种文件夹,比如/myProgram/lib/、/myProgram/docs/等等

在PHP中,如何在/myProgram/之前检测任何文件夹,并创建一个基变量,以便可以相对于基目录/myProgram/写入我的include和require,从而允许我将myProgram放置在根目录、my home dir、/path/to/myProgram/等任何目录中


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

我建议使用当前文件的相对路径,如下所示:

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');

我强烈建议不要使用任何涉及对应用程序所在目录名称进行硬编码的解决方案。

以下是我的做法。。。正是我想要的!在玩了我的程序之后,我发现了

// 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");

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

无论如何,我可以绕过它吗?我真的很想从根目录myProgram开始构建includes和requires。比如$HOME/myProgram/。。。假设您像我一样立即使用chdir命令,那么只需使用“config/mySQLSettings.php”就可以访问setup.So/path/to/myProgram/config/。如果我将您的程序移动到
/path/to/my_program/
,因为我更喜欢这种命名结构,那么会发生什么情况呢;
$rootLoc=strpos($location,“my_程序”)和更新
$。=“myProgram”
$root.=“我的程序”
基本上更新引导应用程序中对
myProgram
的所有引用。