包含的行为

时间:2015-12-26 16:13:09

标签: php xampp filenames

这可能是一个愚蠢而简单的问题,但无法从谷歌找到任何相关的研究,也没有我以前经历过...为了复制这个场景,我简化了原始结构并建立了类似于以下:

文件结构:

ROOT
 |---/config/config.php
 |---/system/system.php
 index.php

config/system.php

return array (
    "test" => "this is test"
); 

config/config.php

class config
{
    public static function site ()
    {
        return include "system.php";
    }
}

index.php

include "config/config.php";
$result = config::site();

var_dump($result);

我原以为$result会包含来自system.php的数组,但它实际输出:int(1)

我猜它已成功包含该文件,这就是它输出1的原因,但这只是我的猜测...

如果我从

更改文件名

/config/system.php/config/sys.php

并在/config/config.php中,从

更改此声明

return include "system.php";return include "sys.php";

它将输出我想要的结果:

array(1) { ["test"]=> string(12) "this is test" }

虽然我找到了解决方法,但我不明白为什么文件名很重要,因为我不认为这是php保留字的情况。此外,我尝试将文件命名为echo.phpstrpos.php,它仍然按预期工作。

为什么我不能将我的脚本命名为system.php ??

如果有问题,我的工作站使用的是xampp:Windows 64bit,php 5.6.8

1 个答案:

答案 0 :(得分:1)

我应该为一个明显的问题做出选择;经典的RTM “小心”。我不能更多地强调我是多么愚蠢.......我的原始结构定义了一个绝对路径,但仅用于自动加载功能而不是在该类中。

来自PHP: include - Manual

  

根据给定的文件路径包含文件,如果没有给出,则包含   指定的include_path。 如果找不到该文件   include_path,include将最终检入调用脚本自己的   目录和失败前的当前工作目录。

所以我检查了include_path并实际指向.;C:\xampp\php\PEAR,在它下面,你猜对了,一个名为system.php的文件。

我的include找到了正确的文件,但找不到我期待的文件。它实际上包括一个pear扩展文件而不是我想要的脚本。

我不知道或记得我在安装XAMPP时安装了pear扩展,也不知道XAMPP将它指向pear文件夹作为默认设置。

总之,我需要将set_include_path()设置为指向当前项目文件夹或使用绝对路径显式调用它

抱歉浪费你的时间