我的网站的某些部分遇到了一些问题。我正在访问来自不同根目录的一些文件,包含端有时是这样的:
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");
?>