2013-07-09 74 views
5

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

一個包含連接至在腳本的全局範圍目前定義 所有變量的引用數組。

所以,下面的代碼必須顯示$ GLOBALS變種具有_SERVER_ENV(如果在php.ini中的variables_order啓用)和_REQUEST鍵:

var_dump($GLOBALS); 

結果是:

  • Under nginx + php-fpm:missing _SERVER_ENV_REQUEST
  • 在CLI:缺少_ENV_REQUEST

嗯..也許有在有關此問題的文檔不便?我已經通過每個頁面看起來每個變量:

,我發現沒有提到關於這種行爲。爲什麼它像那樣工作?

我已經安裝了PHP使用debian包從http://www.dotdeb.org/回購(沒有手動編譯)...目前與nginx + php5-fpm運行。 這是一個PHP的錯誤?

+0

如果你做了'var_dump($ _ SERVER);'? – HamZa

+1

我不確定,但看看['variables_order'](http://www.php.net/manual/en/ini.core.php#ini.variables-order)ini設置 –

+4

$ _SERVER也是一個超全局變量,與$ GLOBALS相同,這就是爲什麼它不存儲在$ GLOBALS中:'這是一個'超全球'或自動全局變量。這僅僅意味着它在整個腳本的所有範圍內都可用。沒有必要做全局$變量;在函數或方法中訪問它.'和'$ _SERVER是一個包含標題,路徑和腳本位置等信息的數組。該數組中的條目由Web服務器創建。不能保證每個Web服務器都會提供這些服務器;服務器可能會省略一些,或者提供其他未在此處列出的其他服務器......# – 2013-07-09 10:22:14

回答

6

我已經創建了php.net網站的錯誤,和PHP團隊回答:https://bugs.php.net/bug.php?id=65223

摘要:

這是不是一個錯誤。除非解析器 認爲需要,否則默認情況下,超級全局變量(又稱自動全局變量)不會將 添加到符號表中。即

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

將列出它。您還可以在php.ini中 控制這種使用auto_globals_jit: http://www.php.net/manual/en/ini.core.php#ini.auto-globals-jit

由於PHP團隊如此回答得這麼快!

+0

感謝您的反饋 – thibauts