我有几个PHP文件包含()来自其他几个目录的其他文件。
在其中一个包含的文件中:foo/bar.php
,我希望bar.php包含目录foo中包含的3个其他文件。但是bar.php实际上包含在另一个目录中的另一个文件中,该文件包含在另一个目录中,依此类推。
如果我这样做了:
include('./apple.php');
include('./orange.php');
在foo/bar.php
中,它是否包含foo
目录中的正确文件,无论哪个文件包含bar.php本身?
答案 0 :(得分:6)
请改用以下内容:
include(dirname(__FILE__).'/apple.php');
我不知道你发布的内容是否可靠,但是会这样。
答案 1 :(得分:2)
没有。在包含文件名开头使用./
强制从Web服务器设置的“当前目录”中搜索它(很可能是初始脚本的目录,或者DocumentRoot,具体取决于Web服务器)
获得所需行为的方式取决于include_path
的值(如果需要,可以使用set_include_path()
进行修改)。
来自include()
的文档:
首先在相对于当前工作目录的每个
include_path entry
中查找包含文件,然后在当前脚本的目录中查找。例如。如果您的include_path
libraries
,则当前工作目录为/www/
,您包含include/a.php
并且该文件中包含“b.php
”,首先在/www/libraries/
中查看b.php,然后在 {中查找{1}} 即可。如果filename以/www/include/
或./
开头,则仅在当前工作目录或当前工作目录的父目录中查找。
因此,如果首先在../
的其他目录中找不到文件名,则可以使用include_path
。
如果apple.php可能存在于其他地方,并且您希望首先使用此文件夹中的副本,则可以使用Matthew的建议,
include('apple.php')
或者,如果您要从当前目录中包含许多文件:
include(dirname(__FILE__).'/apple.php');
答案 2 :(得分:1)
顺便说一句,在包含库时,您通常应使用include_once()
或require_once()
来避免意外循环或双重包含的问题。
答案 3 :(得分:0)
上次遇到这种问题时,我在public_http根文件夹中创建了一个include目录,并将其路径添加到include_path ini配置中。包含文件没有更多麻烦。您甚至可以在该自定义include_folder中添加文件夹以供组织。
说,你有header.php,footer.php,calendar.php和menu.php作为“模板”包括,而一些函数/类包括如encription.php,authentication.php,permissions.php。您可以将它们全部存储在包含文件夹中,例如:
您直接使用
include 'template/header.php
答案 4 :(得分:0)
include()
和require()
将与您当前的工作目录getcwd()
相关,该目录通常与所请求脚本的目录相同(至少在apache下)。但是,如果在CLI模式下,它是从$ PWD继承的内容;
因此,
include(dirname(__file__) . '/include.php');
是一种很好的方法。
答案 5 :(得分:0)
最佳做法是使用绝对路径。您可以在引导程序文件的变量中定义路径的公共部分 为什么我认为这是最佳做法: