【问题标题】:PHP - Best way to use above directory includesPHP - 使用上述目录的最佳方式包括
【发布时间】:2011-06-27 14:54:16
【问题描述】:

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

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

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

../../

【问题讨论】:

    标签: php include include-path


    【解决方案1】:

    如果您有一个针对每个请求运行的文件(例如前端控制器),您可以执行以下操作:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      然后:

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

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

      【讨论】:

      • 我这样用过,效果很好。我创建了一个 configpath.php 来保存我的路径常量。我只是有一个疑问,如果我开始在其他文件中这样使用,是否存在任何安全问题: include_once($_SERVER['DOCUMENT_ROOT'] . 'eggs/config/configpath.php');或者我可以这样使用没有任何问题?
      • yip,你可以很好地使用它。我只是想将它定义为 ROOT 或其他东西 - 它只是有助于使代码更具可读性。
      • 安全风险最小,DOCUMENT_ROOT(和 $_SERVER)完全在服务器端定义,不易受到基于浏览器的攻击。这么说吧,我在非常繁忙的商业网站上使用它。
      【解决方案3】:
      set_include_path('../eggs/libs/lagger/');
      
      require_once("lagger_config.php");
      require_once("lagger_init.php");
      

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

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

      【讨论】:

        【解决方案4】:

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

        如果你不喜欢这样,我有几个项目我将“INCLUDES_FOLDER”定义为绝对路径。

        所以你的包含会变成

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

        【讨论】:

          【解决方案5】:

          要么是这个,要么是设置绝对路径。

          【讨论】:

            【解决方案6】:
            ini_set('include_path', ini_get('include_path') . ':/path/to/eggs/libs'));
            

            在执行任何包含之前将其放在脚本的顶部,这样您就不必在每个 include/require 调用中执行路径。

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

            【讨论】:

              【解决方案7】:

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

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2017-05-02
                • 1970-01-01
                • 2021-10-30
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-04-08
                相关资源
                最近更新 更多