【发布时间】:2013-03-05 11:11:59
【问题描述】:
根据我从 PHP 的文档和此处的其他帖子中收集到的信息,PHP 的 include(和 include_once)执行以下操作:
根据给定的文件路径包含文件,如果没有给出,则根据指定的 include_path。如果在 include_path 中找不到该文件,则 include 最终会在失败前检查调用脚本自己的目录和当前工作目录
我在给定目录中有以下结构:
- index.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 但没有包括它在我上面的示例中的文件只是为了保持它更干净。它工作得很好)
谁能解释这是为什么? 应该以这种方式工作,还是这是一个错误?
【问题讨论】:
-
嗯。 PHP 有时很奇怪。我通常只是将应用程序的根添加到
include_path并指定与之相关的所有内容。从长远来看可以减少混乱,而不会牺牲移动物品的能力。 -
看起来你的评论可能和我要写的一样多。如果你把它作为一个答案,我会接受它......
标签: php include relative-path