【问题标题】:Making php includes work in a sub-directory制作 php 包含在子目录中的工作
【发布时间】:2010-11-13 21:45:49
【问题描述】:

好的,我正在为我的自定义博客在 url /admin 创建一个管理界面。

我是否可以使用与根目录相同的包含(包括自动加载)。

如果可能,我还希望能够自动更正导航中的链接,以便当从 /admin 访问时,它们会将 / 中的 index.php 更改为 ../index.php。

谢谢,尼科

【问题讨论】:

    标签: php directory include


    【解决方案1】:

    对此的最佳做法是定义一个“ABSOLUTE_PATH”常量,其中包含所有内容所在的目录。之后,您可以简单地复制和粘贴所有内容,因为它定义了“完整”路径,不会因目录而异。

    例子

    define("ABS_PATH", $_SERVER['DOCUMENT_ROOT']);
    
    or
    
    define("ABS_PATH", dirname(__FILE__));
    // This defines the path as the directory the file is in.
    

    然后你可以在任何时候简单地这样做来包含一个文件

    include(ABS_PATH . "/path/to/file");
    

    【讨论】:

    • 啊,但是我如何找出这条路径应该是什么?
    • 您可能想查看 PHP 信息中的服务器变量,或者自己定义它。如果您自己定义它,请确保它是所有文件所在的目录。
    【解决方案2】:

    最简单的方法是使用绝对路径/URL。

    对于 URL,在某处定义一个常量/变量,指向应用程序的根目录,例如:

    define('ROOT_URL', 'http://www.example.com');
    

    $root_url = 'http://www.example.com';
    

    并在每个链接中使用它,例如:

    <a href="{$root_url}/my-page.php">blah</a>
    

    这样,总是可以的(当您将项目安装到另一台服务器或子目录中时,您只有一个常量/变量要修改,一切仍然有效)

    对于包含/要求,也总是使用绝对路径;一种解决方案是使用dirname,如下所示:

    include dirname(__FILE__) . '/my_file.php';
    include dirname(__FILE__) . '/../my-other-file.php';
    

    __FILE__ 是当前文件,你正在写这一行; dirname 获取包含该文件的目录的路径(完整路径)。

    这样,您就不必担心文件的相对路径。

    【讨论】:

    • abs 路径会减慢你的速度吗?说如果你不只是保持你的链接直,但在程序流程中。
    【解决方案3】:

    另一个答案类似于结合前两个建议。您可以定义常量:

    define('ABSPATH', dirname(__FILE__).'/');
    

    那么,假设config.php需要包含在站点的许多文件中,那么您可以使用以下语句来完成此操作:

    include(ABSPATH.'config.php');
    

    希望这会有所帮助。

    【讨论】:

      【解决方案4】:

      我过去用于 functions.php 的另一个选项是类自动加载器。

      //Class Autoloader
      spl_autoload_register(function ($className) {
      
          $className = strtolower($className);
          $path = "includes/{$className}.php";
      
          if (file_exists($path)) {
      
              require_once($path);
      
          } else {
      
              die("The file {$className}.php could not be found.");
      
          }
      });
      

      这在某些情况下有效,并且在过去我不想定义绝对 $root url 时对我有帮助。

      【讨论】:

        猜你喜欢
        • 2017-10-10
        • 2016-10-03
        • 1970-01-01
        • 2014-10-13
        • 2019-02-11
        • 1970-01-01
        • 1970-01-01
        • 2014-12-16
        • 2014-09-06
        相关资源
        最近更新 更多