0

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

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

  • 我的文件夹
    • 测试.php
      • 味精.php
    • 味精.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吗?

4

2 回答 2

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

检查说明以下内容的文档include(),如果在提供的路径中找不到引用的文件会发生什么:

include 最终会在失败之前检查调用脚本自己的目录和当前工作目录。

您应该尝试将 include_path 设置为,/myfolder/inner或者,如果/myfolder实际上是您的根目录,那么您可以将其设置为/inner. .注意which的省略current working directory。只是使用一种/手段在根目录中查找。

于 2013-07-16T12:31:29.800 回答
1

您的路径可能是错误的,请从路径中删除“./”。从我所见,你看起来像是从我的文件夹中出来,然后寻找一个内在的东西。

检查包含函数的文档:http: //php.net/manual/en/function.include.php

include 最终会在失败之前检查调用脚本自己的目录和当前工作目录

于 2013-07-16T12:25:24.700 回答