2011-01-12 47 views
0

这是一个愚蠢的问题。当文件A执行文件B的include()并且文件B执行文件C的包含时,并且所有路径都是相对的,都是相对于其自己的路径或“主”文件的“子”引用文件A)他们被包括在内?Php require() - 实际路径

例如:

目录结构

header.html中(文件B)

/图像/logo.png(文件C)

/站点/index.php的(文件A)

的index.php包含: 包括( '../了header.html');

header.html包含: include('images/logo.png');

这项工作?或者因为index.php是“主”文件,它会尝试在“网站”文件夹中查找“图像”吗?

回答

1

它们总是相对于“主”文件。包含的文件被视为主代码的“注入”源代码,所以它们的行为就好像它们在主脚本中一样。

为了解决实际当前文件的东西相对,使用__FILE____DIR__常量总是指向他们所在的文件。

1

路径相对于工作目录。最初的工作目录是包含为响应HTTP请求而直接执行的PHP文件的目录(即,您称为主文件文件)。

include不会更改工作目录,但可以通过调用chdir来手动更改它。不过,我建议不要仅仅为了include而改变工作目录。

更好地利用set_include_path或相应的配置选项,或作为佩卡建议的,使用__DIR__到相对于当前文件的目录的文件名构造。

+0

我明白了。谢谢! – dtj 2011-01-12 20:40:56

+0

+1提醒“工作目录”原则仍然在PHP – 2011-01-12 20:54:27