在文件配置中.php
$_CONFIG = array();
require_once("config.inc.php");
var_dump($_CONFIG);
在config.inc.php文件中
$_CONFIG = array('x' => 'y', ...);
var_dump($_CONFIG);
当从命令行运行时,此代码的输出为:
array(15) {
["x"]=>
string(1) "y"
...
}
array(0) {
}
如果我删除config.php中初始化空$_config数组的第一行,脚本就会工作,并且var_dumps是相同的。
请注意,这是一个从命令行运行的脚本。知道为什么会发生这种事吗?我在两台不同的机器上尝试过,一台使用PHP 5.3.3,另一台使用PHP 5.3.5。
更新-这似乎只是命令行的问题。当从浏览器运行时,它看起来很好。此外,还有第三个文件我忘了提,它包括config.php
test.php
require_once("/path/to/config.php");
当运行test.php而不是从命令行运行config.php时,我会得到上面的输出。
您描述的情况不会产生您描述的输出。里面还有别的事;问题中没有附加代码。
来自一个非常简单的测试:
$ ls -la
-rw-rw-r-- 1 jon jon 59 2012-02-28 20:37 config.inc.php
-rw-rw-r-- 1 jon jon 83 2012-02-28 20:37 config.php
$ cat config.*
<?php
$_CONFIG = array('x' => 'y');
var_dump($_CONFIG);
?>
<?php
$_CONFIG = array();
require_once('config.inc.php');
var_dump($_CONFIG);
?>
$ php config.php
array(1) {
["x"]=>
string(1) "y"
}
array(1) {
["x"]=>
string(1) "y"
}
您看到输出的可能原因:
- config.inc.php使用一个名称空间,定义一个不在全局名称空间中的$_config的新副本
require_once('config.inc.php');
首先检查您的包含路径,并包含与您期望的不同的config.inc.php