【问题标题】:Relative include files相对包含文件
【发布时间】:2011-07-20 21:15:08
【问题描述】:

我有一个文件

workers/activity/bulk_action.php 包含一个文件

include('../../classes/aclass.php');

在 aclass.php 里面是这样的:

include ('../tcpdf/config/lang/eng.php');

似乎第二个文件中的包含正在使用第一个文件的工作目录而不是相对于自身,从而导致错误。这是如何工作的?

【问题讨论】:

    标签: php


    【解决方案1】:

    您可以修改第二个include

    include (__DIR__.'/../tcpdf/config/lang/eng.php');
    

    魔术常数__DIR__ 指的是当前的.php 文件,并且通过在其后附加相对路径,将导致正确的位置。

    但它只适用于 PHP5.3,如果您需要与旧设置兼容,则必须使用 dirname(__FILE__) 构造。

    【讨论】:

      【解决方案2】:

      通过为include_path 设置适当的值,然后使用相对于该目录的路径,您会更好。

      set_include_path(
          get_include_path() .
          PATH_SEPARATOR .
          realpath(__DIR__ . '/your/lib')
      );
      
      include 'tcpdf/config/lang/eng.php';
      include 'classes/aclass.php';
      

      我还建议您看看自动加载。这将使文件包含过时。

      【讨论】:

        【解决方案3】:

        根据给定的文件路径包含文件,如果没有给出,则根据指定的 include_path。如果在 include_path 中找不到该文件,则 include() 最终会在失败之前检查调用脚本自己的目录和当前工作目录。

        您可以使用dirname(__FILE__) 获取当前执行脚本所在目录的路径:

        include(dirname(dirname(__FILE__)) . '/tcpdf/config/lang/eng.php');
        

        (自 PHP 5.3 起,您可以使用__DIR__

        或者,在指向根目录的第一个文件中定义一个常量,并在您的包含中使用它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-12-08
          • 2014-04-24
          • 2019-04-21
          • 2013-04-09
          • 2012-04-08
          • 2014-11-15
          • 1970-01-01
          相关资源
          最近更新 更多