Według http://www.php.net/manual/en/reserved.variables.globals.php:
Tablica asocjacyjna zawierająca odnośniki do wszystkich zmiennych, które są aktualnie zdefiniowanych w zakresie globalnym skryptu.
więc następujący kod musi wykazywać, że $ GLOBALS var ma _SERVER
, _ENV
(jeśli jest włączona w variables_order w php.ini) i _REQUEST
klawisze:
var_dump($GLOBALS);
wynik jest:
- Pod nginx + php-fpm: brakuje
_SERVER
,_ENV
,_REQUEST
- Pod CLI: brak
_ENV
,_REQUEST
Hmm .. może jest smth w docs o takim zachowaniu? Przejrzałem każdej strony dla każdej zmiennej:
_SERVER
: http://www.php.net/manual/en/reserved.variables.server.php_ENV
: http://www.php.net/manual/en/reserved.variables.request.php_REQUEST
: http://www.php.net/manual/en/reserved.variables.request.php
i mam nie znaleziono wzmianki o takim zachowaniu. Dlaczego to działa?
Zainstalowałem php przy użyciu pakietu debian z http://www.dotdeb.org/ repo (nic nie zostało skompilowane ręcznie) ... Obecnie działa z nginx + php5-fpm. Czy to jest błąd php?
A co jeśli zrobiłeś 'var_dump ($ _ SERVER);'? – HamZa
Nie jestem pewien, ale spójrz na ustawienie ['variables_order'] (http://www.php.net/manual/en/ini.core.php#ini.variables-order) –
$ _SERVER jest również zmienna superglobalna, taka sama jak $ GLOBALS, dlatego nie jest przechowywana w $ GLOBALS: 'Jest to 'superglobalna' lub automatyczna globalna zmienna. Oznacza to po prostu, że jest on dostępny we wszystkich zakresach w całym skrypcie.Nie ma potrzeby tworzenia globalnej zmiennej $; aby uzyskać do niego dostęp w ramach funkcji lub metod. "i' $ _SERVER jest tablicą zawierającą informacje takie jak nagłówki, ścieżki i lokalizacje skryptów. Wpisy w tej tablicy są tworzone przez serwer WWW. Nie ma żadnej gwarancji, że każdy serwer WWW dostarczy dowolny z tych serwerów, niektóre serwery mogą pominąć lub dostarczyć inne, nie wymienione tutaj ... ' –