根据我从 PHP 的文档和此处的其他帖子中收集的信息,PHP 的 include(和 include_once)执行以下操作:
根据给定的文件路径包含文件,如果没有给出,则根据指定的 include_path 包含文件。如果在 include_path 中找不到该文件,则 include 最终会在失败之前检查调用脚本自己的目录和当前工作目录
我在给定目录中有以下结构:
- 索引.php
- /dirA(包含 a.php 和 b.php)
- /dirB(包含 c.php)
来自 index.php include_once "dirA/a.php"
以下是在 a.php 中的工作原理:
include_once "b.php"
include_once "dirB/c.php"
以下是在 a.php 中不起作用的内容:
include_once "b.php"
include_once "../dirB/c.php"
对我来说奇怪的是,b.php 是相对于“调用脚本自己的目录”而包含的,但 c.php 只被认为是相对于当前工作目录(即包含 index.php 的目录)。这对我来说似乎有点不一致。PHP 将包含一个相对于调用脚本的文件,但如果包含路径包含,则不会包含../
- 为什么? 为什么../
父目录指令相对于调用脚本不起作用,但相对于当前工作目录? (注意:我对它进行了相对于 cwd 的测试,但在上面的示例中没有包含该文件只是为了保持它更干净。它工作得很好)
任何人都可以解释为什么会这样吗? 它应该以这种方式工作,还是这是一个错误?