5

根据http://www.php.net/manual/en/reserved.variables.globals.php

一个关联数组,包含对当前在脚本全局范围内定义的所有变量的引用。

因此,以下代码必须显示 $GLOBALS var 具有_SERVER, _ENV(如果在 php.ini 中的 variables_order 中启用)和_REQUEST键:

var_dump($GLOBALS); 

结果是:

  • nginx + php-fpm 下:缺少_SERVER, _ENV,_REQUEST
  • 在 cli 下:缺少_ENV_REQUEST

嗯..也许文档中有关于这种行为的信息?我浏览了每个变量的每一页:

而且我没有发现任何关于这种行为的提及。为什么它会这样工作?

我已经使用来自http://www.dotdeb.org/ repo的 debian 包安装了 php (没有手动编译)......目前使用 nginx + php5-fpm 运行。这是一个php错误吗?

4

1 回答 1

6

我在 php.net 网站上创建了一个错误,php 团队回答:https ://bugs.php.net/bug.php?id=65223

概括:

这不是错误。除非解析器认为需要,否则出于性能原因,默认情况下不会将超级全局变量(又名自动全局变量)添加到符号表中。IE

<?php $_SERVER; print_r($GLOBALS); ?>

会列出来。您还可以使用 php.ini 中的 auto_globals_jit 进行控制: http ://www.php.net/manual/en/ini.core.php#ini.auto-globals-jit

感谢php团队这么快回答!

于 2013-07-09T12:06:51.713 回答