1

当包含的文件本身包含另一个文件但使用点前缀引用它时,我遇到了包含问题。例如有三个文件 - inc1.phpinc2.phpsubdir/test.php,其内容是 -

子目录/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"); 它就可以工作。, 没有“./”前缀。我添加了“../.” 到包含路径以尝试使其工作,但这没有效果。

除了使用“./”前缀执行包含之外,这里的解决方案是什么,假设inc1.php和inc2.php不可写并且您只能更改subdir/test.php?你怎么还能在 test.php 中包含 inc1.php?

作为参考,我使用的是 PHP 5.2.9。

4

2 回答 2

7

始终包括使用以下样式,除非您有(非常)令人信服的理由不这样做:

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

它可以避免各种头痛。

于 2009-08-21T03:26:23.853 回答
0

一个简单的chdir()似乎可以解决这个问题;将 test.php 更改为:

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

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

于 2009-08-28T04:05:17.967 回答