Переменные окружения
Создадим сценарий, состоящий всего из трех строк:
<?php
$var = 10;
?>
А теперь вопрос. Сколько переменных доступно сценарию? Думаете, одна
$var? Давайте перепишем нашу программу и добавим одну строчку:
<?php
$var = 10;
echo $_SERVER[‘DOCUMENT_ROOT’];
?>
В результате работы скрипта в окне Web-браузера отобразится следующая строка:
C:/Apache2/htdocs
Откуда же взялась переменная $_SERVER[‘DOCUMENT_ROOT’]? Ведь мы ее не создавали! Ответ на этот вопрос достаточно прост — эта переменная была автоматически создана сервером. Такая переменная называется переменной окружения.
5.23.1. Массив $GLOBALS
Если директива register_globals имеет значение On, то все переменные ок- ружения доступны через массив $GLOBALS. При настройке PHP мы отключили эту директиву, по этой причине переменные окружения попадут в указанный массив, только если они окажутся в глобальной области видимости. Чтобы увидеть основные переменные окружения, воспользуемся функцией print_r():
<?php
// Присваиваем значение, чтобы $_SERVER попал
// в глобальную область видимости
$var = $_SERVER[‘DOCUMENT_ROOT’];
echo "<pre>"; print_r($GLOBALS); echo "</pre>";
?>
В итоге получим результат, показанный в листинге 5.38.
Листинг 5.38. Массив $GLOBALS
Array
(
[GLOBALS] => Array
*RECURSION*
[_POST] => Array
(
)
[_GET] => Array
(
)
[_COOKIE] => Array
(
)
[_FILES] => Array
(
)
[_SERVER] => Array
(
[HTTP_USER_AGENT] => Opera/9.02 (Windows NT 5.1; U; ru) [HTTP_HOST] => localhost
[HTTP_ACCEPT] => text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif,
*/*;q=0.1
[HTTP_ACCEPT_LANGUAGE] => ru-RU,ru;q=0.9,en;q=0.8 [HTTP_ACCEPT_CHARSET] => iso-8859-1, utf-8, utf-16, *;q=0.1 [HTTP_ACCEPT_ENCODING] => deflate, gzip, x-gzip, identity,
*;q=0
[HTTP_CACHE_CONTROL] => no-cache
[HTTP_CONNECTION] => Keep-Alive, TE
[HTTP_TE] => deflate, gzip, chunked, identity, trailers [PATH] => C:\php5;C:\WINDOWS\system32;C:\WINDOWS [SystemRoot] => C:\WINDOWS
[COMSPEC] => C:\WINDOWS\system32\cmd.exe
[PATHEXT] => .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH [WINDIR] => C:\WINDOWS
[SERVER_SIGNATURE] => <address>Apache/2.2.14 (Win32) PHP/5.3.0 Server at localhost Port 80</address>
[SERVER_SOFTWARE] => Apache/2.2.14 (Win32) PHP/5.3.0 [SERVER_NAME] => localhost
[SERVER_ADDR] => 127.0.0.1 [SERVER_PORT] => 80
[REMOTE_ADDR] => 127.0.0.1 [DOCUMENT_ROOT] => C:/Apache2/htdocs [SERVER_ADMIN] => [email protected] [SCRIPT_FILENAME] => C:/Apache2/htdocs/test.php [REMOTE_PORT] => 2035
[GATEWAY_INTERFACE] => CGI/1.1 [SERVER_PROTOCOL] => HTTP/1.1 [REQUEST_METHOD] => GET [QUERY_STRING] =>
[REQUEST_URI] => /test.php [SCRIPT_NAME] => /test.php [PHP_SELF] => /test.php [REQUEST_TIME] => 1258090142
)
[var] => C:/Apache2/htdocs
)
Все, что заключено в квадратные скобки, — это и есть переменные окруже- ния. Если после имени переменной стоит слово Array, то эта переменная в свою очередь является массивом.
Перечислим суперглобальные массивы:
? $_SERVER — массив переменных среды сервера;
? $_FILES — массив переменных, определяющих отправленные через фор-
му файлы;
? $_POST — массив переменных, переданных посредством метода POST;
? $_GET — массив переменных, переданных посредством метода GET;
? $_COOKIE — массив cookies-переменных;
? $_ENV — массив переменных, определяющих конфигурацию среды;
? $_REQUEST — массив всех переменных, вводимых пользователем. В PHP 5.3
этот массив зависит от значения директивы request_order.
В отличие от глобальных переменных суперглобальные массивы видны не только в сценарии, но и внутри функций.
Источник: Прохоренок Н. А. HTML, JavaScript, PHP и MySQL. Джентльменский набор Web-мастера. — 3-е изд., перераб. и доп. — СПб.: БХВ-Петербург, 2010. — 912 с.: ил. + Видеокурс (на CD-ROM) — (Профессиональное программирование)