【问题标题】:PHP variable being reset when run from command line从命令行运行时PHP变量被重置
【发布时间】:2012-02-28 20:30:41
【问题描述】:

在 config.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 数组的 config.php 的第一行,则脚本可以工作,并且 var_dumps 是相同的。

请注意,这是从命令行运行的脚本。知道为什么会这样吗?我在两台不同的机器上试过这个,一台使用 PHP 5.3.3,另一台使用 PHP 5.3.5。

更新 - 这似乎只是命令行的问题。从浏览器运行时,它似乎很好。另外,还有第三个文件我忘了提,它包括 config.php

test.php

require_once("/path/to/config.php");

当从命令行运行 test.php,而不是 config.php,我得到上面的输出。

【问题讨论】:

  • 我创建了相同的文件并看到了预期的结果 - 两次相同的数组。你能用 2 个小文件重现它吗?
  • 完全符合我的预期.. PHP 5.3.10.
  • 你确定你告诉了我们这些文件中的所有内容吗? php --version ?
  • 当你在 config.inc.php 中定义 $_CONFIG 时,你是在函数中做的吗?该问题可能与无法访问的全局变量有关,因此,“重新定义”被视为不同的局部变量(即变量范围的问题)。
  • @yi_H PHP 版本 5.3.3。 config.inc.php 仅填充 $_CONFIG 数组,尽管我已将其截断。 config.phpvar_dump 之后包含更多代码,但在它之前除了 cmets 之外什么都没有,并且这 3 行之间没有任何内容。

标签: php arrays reset


【解决方案1】:

您描述的情况不会产生您描述的输出。还有其他事情正在发生;问题中没有附加代码。

来自一个非常简单的测试:

$ 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

【讨论】:

  • 它不包含不同的 config.inc.php 文件,否则将没有 var_dump(即我对该文件所做的任何编辑都立即在输出中显示)。我忘了提到还有第三个文件,包括 config.php。所以我会从命令行运行第三个文件,而不是 config.php 本身。
猜你喜欢
  • 1970-01-01
  • 2013-08-08
  • 2012-05-30
  • 2010-11-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-04
  • 1970-01-01
  • 2011-10-13
相关资源
最近更新 更多