这可能是一个愚蠢而简单的问题,但无法从谷歌找到任何相关的研究,也没有我以前经历过...为了复制这个场景,我简化了原始结构并建立了类似于以下:
文件结构:
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.php
或strpos.php
,它仍然按预期工作。
为什么我不能将我的脚本命名为system.php
??
如果有问题,我的工作站使用的是xampp:Windows 64bit,php 5.6.8
答案 0 :(得分:1)
我应该为一个明显的问题做出选择;经典的RTM “小心”。我不能更多地强调我是多么愚蠢.......我的原始结构定义了一个绝对路径,但仅用于自动加载功能而不是在该类中。
根据给定的文件路径包含文件,如果没有给出,则包含 指定的include_path。 如果找不到该文件 include_path,include将最终检入调用脚本自己的 目录和失败前的当前工作目录。
所以我检查了include_path并实际指向.;C:\xampp\php\PEAR
,在它下面,你猜对了,一个名为system.php
的文件。
我的include
找到了正确的文件,但找不到我期待的文件。它实际上包括一个pear扩展文件而不是我想要的脚本。
我不知道或记得我在安装XAMPP时安装了pear扩展,也不知道XAMPP将它指向pear文件夹作为默认设置。
总之,我需要将set_include_path()
设置为指向当前项目文件夹或使用绝对路径显式调用它
抱歉浪费你的时间