【问题标题】:PHP require_once relative to variable document rootPHP require_once 相对于变量文档根
【发布时间】:2012-01-15 09:36:48
【问题描述】:

我正在尝试使用 require_once,但是,我并不总是知道文件结构与 DOCUMENT_ROOT 的关系...

可能是... /config.php 或 /theapp/config.php 或 /dev/theapp/config.php 或 /something_else/theapp/config.php

可以从文件中返回路径,例如 require_once('../config.php'),但在某些情况下文件可能位于符号链接目录中。

基本上我正在尝试找到一种方法,在任何情况下,任何调用 config.php 文件的文件都可以找到它。

【问题讨论】:

    标签: php


    【解决方案1】:

    这就是 include_path 配置设置的用途。我通常在我的站点的 Apache 配置中设置它,或者在本地 .htaccess 文件中设置它。使用php_value 指令。

    所以,基本上,在您的 Apache 配置文件中:

    php_value include_path .:/var/www/where-your-site-is
    

    然后,从您的脚本中,您只需使用:

    <?php
      require_once 'conf/config.php';
      require_once 'views/template.php';
    ?>
    

    无论您在站点目录结构中的哪个位置。

    【讨论】:

    • 你也可以在运行时在一个 php 文件中设置它: $path = '/usr/lib/pear'; set_include_path(get_include_path() . PATH_SEPARATOR . $path);
    【解决方案2】:

    如果你有 PHP 5.3+ 使用这个:

    // My page: /dir1/dir2/welcome.php
    // My include: /inc/top.php 
    require_once(__DIR__.'/../../top.php');
    

    来自docs__DIR__是文件所在的目录。如果在包含中使用,则返回包含文件的目录。

    【讨论】:

      【解决方案3】:

      您可以使用dirname(__FILE__) 它返回脚本的完整路径。

      例子

      require_once(dirname(__FILE__).'/../config/config.php');
      

      【讨论】:

      • 我认为 post formatter 改变了你的答案——这应该是 __ FILE __ (下划线和 FILE 之间没有空格)
      • 所以,现在我有一个文件(3 级深)通过调用:require_once('../../../config.php'),我将如何使用 dirname 并扫描回来3 级?
      【解决方案4】:

      提出了一个非常简单的解决方案,该解决方案适用于应用作为一个单元运行以及核心系统通过符号链接链接时:

      代替:

      require_once('../../../config.php');
      

      我用:

      function changeDir($up_n){
          $split = explode("/",$_SERVER['SCRIPT_FILENAME']);
          array_pop($split); // Remove current file name
          for ($i=1; $i<=$up_n; $i++){ array_pop($split); }
          return implode("/",$split);
      }
      
      require_once(changeDir(3)."/config.php");
      

      直接跳出来

      【讨论】:

        猜你喜欢
        • 2014-10-21
        • 2011-05-27
        • 2012-03-27
        • 1970-01-01
        • 2016-08-31
        • 2014-04-14
        • 2012-11-25
        • 1970-01-01
        • 2013-10-08
        相关资源
        最近更新 更多