当包含的文件本身包含另一个文件但是用点前缀引用它时,我遇到了包含问题。例如,有三个文件 - inc1.php , inc2.php 和 subdir / test.php ,其内容为 - < / p>
子目录/ test.php的:
set_include_path(get_include_path().":../:../.");
require("inc1.php");
inc1.php:
require("./inc2.php");
inc2.php
echo "OK";
此处显示的包含树失败,无法打开流:没有此类文件或目录错误。如果inc1.php包含一个简单的 require(“inc2.php”); ,没有“./”前缀,它就可以工作。我添加了“../。”将include路径作为尝试使其工作,但这没有效果。
除了使用“./”前缀执行include之外,这里有什么解决方案,假设inc1.php和inc2.php不可写,你只能改变subdir / test.php?你怎么能在test.php中包含inc1.php?
供参考,我使用的是PHP 5.2.9。
答案 0 :(得分:6)
除非您有(非常)令人信服的理由不这样做,否则请务必使用以下格式:
include(dirname(__FILE__)."/inc2.php");
它可以避免各种麻烦。
答案 1 :(得分:0)
一个简单的chdir()
似乎适用于此;将test.php更改为:
chdir("../");
require("inc1.php");
似乎inc1.php中的“./”被解释为'subdir /',因此它只在'subdir'文件夹中查找inc1.php,尽管包含路径。