PHP包含:有没有一种方法可以仅相对于该文档包含文件?

18

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

include 'inc/footer.php';
如果我想在footer.php中包含另一个文件,我必须相对于index.php文件(包含该文件的文件)进行操作。这可能不是问题,但如果我想从完全不同的位置包含index.php怎么办?
我知道有几种方法可以实现此目的,例如定义绝对路径或使用 dirname(__FILE__)
这从来不是什么大问题,因为我总能找到一种方法解决它,但我一直想知道php中的包含原理。
有人可以解释一下内部运作机制吗?
2个回答

40
这可能会有所帮助:(来自http://php.net/manual/en/function.include.php
引用块: 文件包含的路径首先会相对于当前工作目录在每个include_path条目中查找,然后再在当前脚本的目录中查找。例如,如果您的include_path是libraries,当前工作目录是/www/,您包含了include/a.php并且该文件中有include“b.php”,则首先在/www/libraries/中查找b.php,然后在/www/include/中查找。如果文件名以./或../开头,则仅在当前工作目录或父工作目录中查找。
你的问题陈述如下:
引用块: 如果我想在footer.php中包含另一个文件,则必须使用相对于index.php文件(包含它的文件)的路径。
只有当你尝试使用./../作为文件路径时,才是正确的。如果需要使用相对路径包含当前文件上面的文件,您可以使用(如您所建议的):
include( dirname(__FILE__) . '/../file.php')
如果你定义了一个绝对路径,你也可以将它添加到当前的include_path中:
set_include_path(get_include_path() . PATH_SEPARATOR . '/absolute/path');
您可以使用相对于 '/absolute/path/' 的路径进行所有包含文件的操作。

-4

找到答案的最佳地方是在 PHP 手册中。

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

简短回答:

路径是相对于执行PHP脚本而不是子包含文件的。

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


最好使用define设置还是更改ini文件? - 0plus1
1
我的意思是将其设置为宏定义。例如: define ('CLASS_DIR', '/path/to/classes/'); - Derek Organ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接