PHP包含不正确的搜索路径?

时间:2013-07-16 12:15:30

标签: php include php-internals

我在文件夹test.php中有一个文件myfoldermyfolder还包含另一个名为inner的文件夹。

myfolderinner都包含一个名为msg.php的文件。整个布局如下所示:

  • MyFolder文件
    • test.php的
      • msg.php
    • 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吗?

2 个答案:

答案 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将最终检查调用脚本自己的目录和失败前的当前工作目录