如果我有一个包含inc/footer.php的index.php文件,我会写:
include 'inc/footer.php';
Run Code Online (Sandbox Code Playgroud)
如果我想在footer.php中包含另一个文件,我必须相对于index.php文件(包含它的那个)进行.这可能不是问题,但如果我想从整个不同的位置包含index.php呢?
我知道有几种方法可以实现这一点,比如定义绝对路径或使用dirname(FILE).
这是一个从来没有真正问题的东西,因为我总是想出来,但我总是想知道如何在php中完成包含工作.
有人可以解释一下我在幕后发生了什么事吗?
谢谢
Tom*_*igh 36
这可能会有所帮助:(来自http://php.net/manual/en/function.include.php)
首先在相对于当前工作目录的每个include_path条目中查找包含文件,然后在当前脚本的目录中查找.例如,如果你的include_path是库,当前工作目录是/ www /,你包括include/a.php,那个文件中包含"b.php",b.php首先在/ www/libraries /中查找,然后在/网络/包含/.如果filename以./或../开头,则仅分别在当前工作目录或当前工作目录的父目录中查找
你的问题陈述:
如果我想在footer.php中包含另一个文件,我必须相对于index.php文件(包含它的那个)进行.
仅当您尝试的文件路径include()以./或开头时才会出现这种情况../.如果需要使用相对路径在当前文件上方包含文件,则可以(如您的建议)使用:
include( dirname(__FILE__) . '/../file.php')
Run Code Online (Sandbox Code Playgroud)
如果定义绝对路径,还可以将其添加到当前include_path:
set_include_path(get_include_path() . PATH_SEPARATOR . '/absolute/path');
Run Code Online (Sandbox Code Playgroud)
然后,您可以执行相对于'/ absolute/path /'的所有包含.