这是一个愚蠢的问题。当文件A执行文件B的include(),文件B执行文件C的包含,并且所有路径都是相对的时,是相对于它们自己的路径的“子”引用,或者是“主”文件(文件A)中包含它们?
例如:
目录结构
根
header.html(文件B)
/ images / logo.png(文件C)
/ site / index.php(文件A)
index.php包含: 包括( '../了header.html');
header.html包含: 包括( '图像/ logo.png');
这会有用吗?或者因为index.php是'主'文件,它会尝试在'sites'文件夹中查找'images'吗?
答案 0 :(得分:1)
路径相对于工作目录。初始工作目录是包含直接执行以响应HTTP请求的PHP文件的目录(即您所谓的 master 文件。)。
include
不会更改工作目录,但可以通过调用chdir手动更改。但是,我建议不要仅仅为include
更改工作目录。
更好地使用set_include_path或相应的配置选项,或者如Pekka建议的那样,使用__DIR__
构建相对于当前文件目录的文件名。
答案 1 :(得分:1)
它们总是相对于“主”文件。包含的文件被视为主代码中的源代码“注入”,因此它们的行为就像它们在主脚本中一样。
要解决与实际当前文件相关的问题,请使用始终指向其所在文件的__FILE__
和__DIR__
常量。