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

时间:2011-06-27 14:54:17

标签: php include include-path

我遇到一些问题,我的网站的某些部分正在访问来自不同根目录的某些文件,而有时包括这样的结尾:

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

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

../../

7 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:1)

set_include_path('../eggs/libs/lagger/');

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

唯一的好处是,您只能使用../一次,而不是每次使用。但是,当../的数量发生变化时,您仍需要声明相应的路径。

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

答案 2 :(得分:1)

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

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

然后:

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

P.S。我建议你这样做,因为你可以使用ROOT建立一致的路径。

答案 3 :(得分:1)

相对路径,就像你正在做的那样,是包含像你这样的文件的标准方式。

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

所以你的包含会成为

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

答案 4 :(得分:0)

它是这个或设置绝对路径。

答案 5 :(得分:0)

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

在执行任何包含之前将其置于脚本的顶部将节省您必须在每个include / require调用中执行路径。

或者你可以修改php.ini级别的include_path,这样它对所有脚本都是永久性的。

答案 6 :(得分:-1)

您可以定义一些可以在整个网站中使用的常量:

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

?>