如果我有一个包含inc / footer.php的index.php文件,我会写:
include 'inc/footer.php';
如果我想在footer.php中包含另一个文件,我必须相对于index.php文件(包含它的那个)进行。这可能不是问题,但如果我想从整个不同的位置包含index.php呢?
我知道有几种方法可以实现这一点,例如定义绝对路径或使用dirname( FILE )。
这从来就不是一个真正的问题,因为我总是想出来,但我总是想知道如何在php中完成包含。
有人可以解释一下我在幕后发生了什么事吗?
由于
答案 0 :(得分:35)
这可能会有所帮助:(来自http://php.net/manual/en/function.include.php)
首先查看包含文件 for for each include_path条目 相对于目前的工作 目录,然后在目录中 当前脚本例如。如果你的 include_path是库,current 工作目录是/ www /,你 包括include / a.php,还有 在该文件中包含“b.php”,b.php 首先看看/ www / libraries / 然后在/ www / include /。如果文件名 从./或../开始,看起来 仅适用于当前的工作 当前的目录或父目录 工作目录,分别为
你的问题是:
如果我想要包含其他文件 在footer.php里面,我必须这样做 相对于index.php文件( 一个包括它的人。)
仅当您尝试include()
的文件路径以./
或../
开头时才会出现这种情况。如果需要使用相对路径在当前文件上包含文件,则可以(如您的建议)使用:
include( dirname(__FILE__) . '/../file.php')
如果定义绝对路径,还可以将其添加到当前的include_path:
set_include_path(get_include_path() . PATH_SEPARATOR . '/absolute/path');
然后,您可以执行相对于'/ absolute / path /'的所有包含。
答案 1 :(得分:-3)
找到答案的最佳位置是PHP手册。
http://php.net/manual/en/function.include.php
简短回答: 该路径是相对于执行的PHP脚本而不是子包含的。
设置函数,类等文件夹的全局绝对路径是最好的方法。