PHP-使用上述目录的最佳方式包括


PHP - Best way to use above directory includes

我的网站的某些部分遇到了一些问题。我正在访问来自不同根目录的一些文件,包含端有时是这样的:

require_once ('../eggs/libs/lagger/lagger_config.php');
require_once ('../eggs/libs/lagger/lagger_init.php');

有时是这样的:

require_once("../libs/lagger/lagger_config.php");
require_once("../libs/lagger/lagger_init.php");

有没有更好的方法来解决这个问题,而不必使用:

../../

如果你有一个文件可以为每个请求运行(比如前端控制器),你可以做这样的事情:

define('APP_PATH', realpath(dirname(__FILE__)));

然后,在您的个人脚本中:

require_once APP_PATH . '/library/whatever.php';

最好的方法是获取基本目录,即

define("ROOT",$_SERVER["DOCUMENT_ROOT"]);
define("LAGGER",ROOT."/lagger/"):

然后:

require_once(LAGGER."lagger_config.php");
require_once(LAGGER."lagger_init.php");

附言:我建议这样做,因为你可以使用ROOT来建立一致的路径。

set_include_path('../eggs/libs/lagger/');
require_once("lagger_config.php");
require_once("lagger_init.php");

这样做的唯一好处是您只能使用../一次,而不是每次包含。但是,当../的数量发生变化时,您仍然需要声明适当的路径。

另一方面,如果脚本可以访问根目录,则可以将include路径定义为{root}/eggs/libs/lagger/(其中{root}是根目录的路径),只需设置一次,而不使用相对路径。

像您所做的那样,相对路径是包含文件的标准方式。

如果您不喜欢,我有一些项目将INCLUDES_FOLDER定义为绝对路径。

所以您的包含将成为

require_once(INCLUDES_FOLDER."/libs/lagger/lagger_config.php");
require_once(INCLUDES_FOLDER."/libs/lagger/lagger_init.php");

要么是this,要么是set绝对路径。

ini_set('include_path', ini_get('include_path') . ':/path/to/eggs/libs'));

在执行任何include之前,将其放在脚本的顶部,将节省您在每次include/request调用中执行路径的时间。

或者,您可以在php.ini级别修改include_path,使其对所有脚本都是永久的。

好吧,你可以定义一些常数,你可以在整个网站上使用:

<?php
   define("ABS_PATH", '../');
   define("DBL_ABS_PATH", '../../');
   //used in code:
   require_once (ABS_PATH.'eggs/libs/lagger/lagger_config.php');
   //and:
   require_once(DBL_ABS_PATH."libs/lagger/lagger_init.php");
?>