Предопределенные переменные PHP
Любому запускаемому скрипту PHP предоставляет большое количество предопределенных переменных. Однако, многие из этих переменных не могут быть полностью задокументированы, поскольку они зависят от запущенного сервера, его версии и настроек, а также других факторов. Некоторые из этих переменных не доступны, когда PHP запущен из командной строки.
Начиная с PHP 4.2.0, значение директивы register_globals
по умолчанию
установлено в off
(отключено). Это большое изменение в PHP. Положение
register_globals
в off
делает предопределенные переменные
недоступными по имени. Например, чтобы получить DOCUMENT_ROOT
, вам необходимо
будет использовать $_SERVER['DOCUMENT_ROOT']
вместо $DOCUMENT_ROOT
,
или $_GET['id']
из URL http://www.somehost.ru/test.php?id=3
вместо $id
, или $_ENV['HOME']
вместо $HOME
.
Использование предопределенных переменных PHP через суперглобальные массивы является предпочтительным.
Начиная с версии 4.1.0, PHP предоставляет дополнительный набор предопределенных массивов,
содержащих переменные web-сервера (если они доступны), окружения и пользовательского ввода.
Эти новые массивы являются особыми, поскольку они автоматически глобальны — то есть,
автоматически доступны в любой области видимости. По этой причине они также известны как
'суперглобальные' массивы. Заметим, что предопределенные переменные все еще доступны
через старые массивы ($HTTP_*_VARS
) . Начиная с PHP 5.0.0, старые глобальные
массивы могут быть отключены директивой register_long_arrays
.
Чтобы получить полный список переменных web-сервера, окружения и РНР, определенных для вашей конфигурации системы, достаточно выполнить следующий скрипт:
<?php
echo "<h2>Переменные окружения сервера $_SERVER[]</h2>n";
echo "<table border='1' cellspacing='0' cellpadding='4'>n";
foreach($_SERVER as $index => $val)
{
echo "<tr><td>".$index."</td><td>".$val."</td></tr>n";
}
echo "</table>n";
echo "<h2>Глобальные переменные $GLOBALS[]</h2>n";
echo "<table border='1' cellspacing='0' cellpadding='4'>n";
foreach($GLOBALS as $index => $val)
{
echo "<tr><td>".$index."</td><td>".$val."</td></tr>n";
}
echo "</table>n";
// и так далее ...
?>
Суперглобальные массивы.
- $GLOBALS
- Содержит ссылку на каждую переменную, доступную в данный момент в глобальной области видимости скрипта. Ключами этого массива являются имена глобальны переменных.
- $_SERVER
- Переменные, установленные web-сервером либо напрямую связанные с окружением выполнения текущего скрипта. Аналог старого массива
$HTTP_SERVER_VARS
(который по-прежнему доступен, но не рекомендуется). - $_GET
- Переменные, передаваемые скрипту через HTTP-метод
GET
. Аналог старого массива$HTTP_GET_VARS
(который по-прежнему доступен, но не рекомендуется). - $_POST
- Переменные, передаваемые скрипту через HTTP-метод
POST
. Аналог старого массива$HTTP_POST_VARS
(который по-прежнему доступен, но не рекомендуется). - $_COOKIE
- Переменные, передаваемые скрипту через HTTP
cookies
. Аналог старого массива$HTTP_COOKIE_VARS
(который по-прежнему доступен, но не рекомендуется). - $_FILES
- Переменные, передаваемые скрипту через HTTP post-загрузку файлов. Аналог старого массива
$HTTP_POST_FILES
(который по-прежнему доступен, но не рекомендуется). - $_ENV
- Переменные, передаваемые скрипту через окружение. Аналог старого массива
$HTTP_ENV_VARS
(который по-прежнему доступен, но не рекомендуется). - $_REQUEST
- Переменные, передаваемые скрипту через механизмы ввода
GET
,POST
иCOOKIE
, и которым, следовательно, нельзя доверять. Наличие и порядок включения переменных в этот массив определяется в соответствии с директивой конфигурации PHPvariables_order
. Этот массив не имеет прямых аналогов в версиях PHP до 4.1.0. - $_SESSION
- Переменные, зарегистрированные на данный момент в сессии скрипта. Аналог старого массива
$HTTP_SESSION_VARS
(который по-прежнему доступен, но не рекомендуется).