PHP包含路径 - 如果文件引用“./”前缀,则包含失败

时间:2009-08-21 03:23:29

标签: php include include-path

当包含的文件本身包含另一个文件但是用点前缀引用它时,我遇到了包含问题。例如,有三个文件 - 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。

2 个答案:

答案 0 :(得分:6)

除非您有(非常)令人信服的理由不这样做,否则请务必使用以下格式:

include(dirname(__FILE__)."/inc2.php");

它可以避免各种麻烦。

答案 1 :(得分:0)

一个简单的chdir()似乎适用于此;将test.php更改为:

chdir("../");
require("inc1.php");

似乎inc1.php中的“./”被解释为'subdir /',因此它只在'subdir'文件夹中查找inc1.php,尽管包含路径。