我遇到一些问题,我的网站的某些部分正在访问来自不同根目录的某些文件,而有时包括这样的结尾:
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");
有没有更好的方法来解决这个问题,而不必使用:
../../
答案 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");
?>