我在文件夹test.php
中有一个文件myfolder
。 myfolder
还包含另一个名为inner
的文件夹。
myfolder
和inner
都包含一个名为msg.php的文件。整个布局如下所示:
在test.php
中,我已将include_path设置为./inner
并包含文件msg.php
:
<?php
error_reporting(E_ALL | E_STRICT);
ini_set("include_path", "./inner");
echo ini_get('include_path'); // shows ./inner
include("msg.php"); // outputs hello from myfolder/inner/msg.php
?>
但是,如果我将工作目录修改为./inner
,则会包含myfolder/msg.php
而不是myfolder/inner/msg.php
:
<?php
error_reporting(E_ALL | E_STRICT);
ini_set("include_path", "./inner");
echo ini_get('include_path'); // shows ./inner
chdir('./inner');
include("msg.php"); // outputs hello from myfolder/msg.php
?>
第二段代码不应该包含myfolder/inner/msg.php
而不是myfolder/msg.php
吗?
答案 0 :(得分:3)
我们先来看看你的目录路径语法。
./inner
这就是说,查看当前目录(./
)中的inner
目录。
在将include_path
设置为./inner
之前,您将当前工作目录更改为./inner
,因此现在您实际上正在寻找/myfolder/inner/inner/msg.php
。
让我们再看看你的代码。
//Current working directory is /myfolder
//Here you change the current working directory to /myfolder/inner
chdir('./inner');
//Here you set the include_path to the directory inner in the current working directory, or /myfolder/inner/inner
ini_set("include_path", "./inner");
//You echo out the explicit value of include_path, which, of course, is ./inner
echo ini_get('include_path'); // shows ./inner
//include fails to find msg.php in /myfolder/inner/inner so it looks in the scripts directory, which is /myfolder/msg.php.
include("msg.php"); // outputs hello from myfolder/msg.php
检查documentation,其中说明如果include()
无法找到所提供路径中引用的文件,会发生什么:
include将最终检入调用脚本自己的目录和 失败之前的当前工作目录。
您应该尝试将include_path设置为/myfolder/inner
,或者如果/myfolder
实际上是您的root,则可以将其设置为/inner
。请注意遗漏.
,这意味着current working directory
。只需使用/
即可查看根目录。
答案 1 :(得分:1)
有可能你的道路是错的,从路径中取出“./”。从我看来,它看起来就像是从myfolder中走出来,然后寻找一个内在的东西。
检查文档中的include函数:http://php.net/manual/en/function.include.php
include将最终检查调用脚本自己的目录和失败前的当前工作目录