【问题标题】:php includes is there any way to include a file relative only to that document?php 包含有没有办法包含仅与该文档相关的文件?
【发布时间】:2010-11-05 02:42:41
【问题描述】:

如果我有一个包含 inc/footer.php 的 index.php 文件,我会写:

include 'inc/footer.php';

如果我想在 footer.php 中包含另一个文件,我必须相对于 index.php 文件(包含它的那个文件)执行此操作。这可能不是问题,但是如果我想从一个完全不同的位置包含 index.php 怎么办?

我知道有几种方法可以实现这一点,例如定义绝对路径或使用dirname(__FILE__)

这从来都不是真正的问题,因为我总是以一种或另一种方式解决它,但我一直想知道在 php 中究竟是如何包含工作的。

谁能解释一下幕后到底发生了什么?

【问题讨论】:

    标签: php include


    【解决方案1】:

    这可能会有所帮助:(来自http://php.net/manual/en/function.include.php

    首先查看包含的文件 在每个 include_path 条目中 相对于当前工作 目录,然后在目录中 当前脚本。例如。如果你的 include_path 是库,当前 工作目录是/www/,你 包括 include/a.php 并且有 在该文件 b.php 中包含“b.php” 首先在 /www/libraries/ 中查找 然后在 /www/include/ 中。如果文件名 以 ./ 或 ../ 开头,看起来 仅在当前工作中 当前目录或父目录 工作目录,分别

    你的问题是:

    如果我想包含另一个文件 在footer.php中,我必须这样做 相对于 index.php 文件( 一个包含它)。

    仅当您尝试 include() 的文件路径以 ./../ 开头时才适用。如果您需要使用相对路径在当前文件上方包含一个文件,您可以(按照您的建议)使用:

    include( dirname(__FILE__) . '/../file.php')
    

    如果你定义了一个绝对路径,你也可以把这个添加到当前的include_path中:

    set_include_path(get_include_path() . PATH_SEPARATOR . '/absolute/path');
    

    然后您可以执行所有相对于“/absolute/path/”的包含。

    【讨论】:

      【解决方案2】:

      找到答案的最佳位置是 PHP 手册。

      http://php.net/manual/en/function.include.php

      简短回答: 路径是相对于执行的 PHP 脚本没有 sub 包括的。

      为您的函数、类等文件夹设置全局绝对路径是最好的方法。

      【讨论】:

      • 使用定义或更改 ini 文件进行设置是否更好?
      • 我的意思是把它设置为一个定义。例如定义('CLASS_DIR', '/path/to/classes/');
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-24
      • 1970-01-01
      • 2020-11-30
      • 2020-05-08
      • 2012-02-13
      • 2022-06-29
      相关资源
      最近更新 更多