PHP предоставляет всем скриптам большое количество предопределённых переменных. Эти переменные содержат всё, от внешних данных до переменных среды окружения, от текста сообщений об ошибках до последних полученных заголовков.


Суперглобальные переменные

Суперглобальные переменные — это встроенные переменные, которые всегда доступны во всех областях видимости.

Некоторые предопределённые переменные в PHP являются "суперглобальными", что означает, что они доступны в любом месте скрипта. Нет необходимости использовать синтаксис global $variable; для доступа к ним в функциях и методах.

Суперглобальными переменными являются:

  • $GLOBALS
  • $_SERVER
  • $_GET
  • $_POST
  • $_FILES
  • $_COOKIE
  • $_SESSION
  • $_REQUEST
  • $_ENV

$GLOBALS

$GLOBALS — Ссылки на все переменные глобальной области видимости

Ассоциативный массив (array), содержащий ссылки на все переменные, определенные в данный момент в глобальной области видимости скрипта. Имена переменных являются ключами массива.

function test() {
	$foo = "локальная переменная";
	
	echo '$foo в глобальной области видимости: ' . $GLOBALS["foo"];
	echo '$foo в текущей области видимости: ' . $foo;
}

$foo = "Пример содержимого";
test();

// $foo в глобальной области видимости: Пример содержимого
// $foo в текущей области видимости: локальная переменная

$_SERVER

$_SERVER -- $HTTP_SERVER_VARS [удалено] — Информация о сервере и среде исполнения

Переменная $_SERVER - это массив, содержащий информацию, такую как заголовки, пути и местоположения скриптов. Записи в этом массиве создаются веб-сервером. Нет гарантии, что каждый веб-сервер предоставит любую из них; сервер может опустить некоторые из них или предоставить другие, не указанные здесь.

$indicesServer = array(
	'PHP_SELF',
	'argv',
	'argc',
	'GATEWAY_INTERFACE',
	'SERVER_ADDR',
	'SERVER_NAME',
	'SERVER_SOFTWARE',
	'SERVER_PROTOCOL',
	'REQUEST_METHOD',
	'REQUEST_TIME',
	'REQUEST_TIME_FLOAT',
	'QUERY_STRING',
	'DOCUMENT_ROOT',
	'HTTP_ACCEPT',
	'HTTP_ACCEPT_CHARSET',
	'HTTP_ACCEPT_ENCODING',
	'HTTP_ACCEPT_LANGUAGE',
	'HTTP_CONNECTION',
	'HTTP_HOST',
	'HTTP_REFERER',
	'HTTP_USER_AGENT',
	'HTTPS',
	'REMOTE_ADDR',
	'REMOTE_HOST',
	'REMOTE_PORT',
	'REMOTE_USER',
	'REDIRECT_REMOTE_USER',
	'SCRIPT_FILENAME',
	'SERVER_ADMIN',
	'SERVER_PORT',
	'SERVER_SIGNATURE',
	'PATH_TRANSLATED',
	'SCRIPT_NAME',
	'REQUEST_URI',
	'PHP_AUTH_DIGEST',
	'PHP_AUTH_USER',
	'PHP_AUTH_PW',
	'AUTH_TYPE',
	'PATH_INFO',
	'ORIG_PATH_INFO'
);

echo '<table cellpadding="10">';

foreach ($indicesServer as $arg) {
	if (isset($_SERVER[$arg])) {
		echo '<tr><td>' . $arg . '</td><td>' . $_SERVER[$arg] . '</td></tr>';
	} else {
		echo '<tr><td>' . $arg . '</td><td>-</td></tr>';
	}
}

echo '</table>' ;

$_GET

$_GET -- $HTTP_GET_VARS [устарело] — Переменные HTTP GET

Ассоциативный массив переменных, переданных скрипту через параметры URL (известные также как строка запроса). Обратите внимание, что массив не только заполняется для GET-запросов, а скорее для всех запросов со строкой запроса.

$HTTP_GET_VARS содержит аналогичный набор данных, но не является суперглобальным. (Обратите внимание, что $HTTP_GET_VARS и $_GET являются разными переменными и обрабатываются PHP независимо друг от друга).

echo 'Привет, ' . htmlspecialchars($_GET["name"]);

Подразумевается, что пользователь ввел в браузере адрес http://example.com/?name=Иван

Результатом выполнения данного примера будет что-то подобное: Привет, Иван


$_POST

$_POST -- $HTTP_POST_VARS [устарело] — Переменные HTTP POST

Ассоциативный массив данных, переданных скрипту через HTTP методом POST при использовании application/x-www-form-urlencoded или multipart/form-data в заголовке Content-Type запроса HTTP.

$HTTP_POST_VARS содержит аналогичный набор данных, но не является суперглобальным. ($HTTP_POST_VARS и $_POST являются разными переменными и обрабатываются PHP независимо друг от друга).

echo 'Привет ' . htmlspecialchars($_POST["name"]);

Подразумевается, что пользователь отправил через POST name=Иван

Результатом выполнения данного примера будет что-то подобное: Привет, Иван


$_FILES

$_FILES -- $HTTP_POST_FILES [устаревшее] — Переменные файлов, загруженных по HTTP

Ассоциативный массив (array) элементов, загруженных в текущий скрипт через метод HTTP POST.

$HTTP_POST_FILES содержит ту же начальную информацию, но не является суперглобальным. (Обратите внимание, что $HTTP_POST_FILES и $_FILES являются разными переменными, так что PHP обрабатывает их соответственно).


$_REQUEST

$_REQUEST — Переменные HTTP-запроса

Ассоциативный массив (array), который по умолчанию содержит данные переменных $_GET, $_POST и $_COOKIE.


$_SESSION

$_SESSION -- $HTTP_SESSION_VARS [устарело] — Переменные сессии

Ассоциативный массив, содержащий переменные сессии, которые доступны для текущего скрипта.

$HTTP_SESSION_VARS первоначально содержит ту же информацию, но она не является суперглобальной переменной. (Обратите внимание, что $HTTP_SESSION_VARS и $_SESSION являются различными переменными и в таковом качестве обрабатываются PHP).


$_ENV

$_ENV -- $HTTP_ENV_VARS [устарело] — Переменные окружения

Ассоциативный массив (array) значений, переданных скрипту через переменные окружения.

Эти значения импортируются в глобальное пространство имен PHP из системных переменных окружения, в котором запущен парсер PHP. Большинство значений передаётся из командной оболочки, под которой запущен PHP, и в разных системах, вероятно, используются разные типы оболочек поэтому окончательный список невозможно представить.

Некоторые переменные окружения включают CGI-переменные, причем их наличие не зависит от того, запущен ли PHP как модуль сервера или как препроцессор CGI.

$HTTP_ENV_VARS содержит те же данные, но не является суперглобальной переменной. (Следует отметить, что $HTTP_ENV_VARS и $_ENV - разные переменные и обрабатываются по-иному).

echo 'Мое имя пользователя: ' .$_ENV["USER"];

Допустим, скрипт запустил "orkhanalyshov"

Результатом выполнения данного примера будет что-то подобное:

Мое имя пользователя: orkhanalyshov

$_COOKIE

$_COOKIE -- $HTTP_COOKIE_VARS [устарело] — HTTP Cookies

Ассоциативный массив (array) значений, переданных скрипту через HTTP Cookies.

$HTTP_COOKIE_VARS содержит те же данные, но не является суперглобальной переменной. (Следует отметить, что $HTTP_COOKIE_VARS и $_COOKIE - разные переменные и PHP обрабатывает каждую из них по-своему).

echo 'Привет, ' . htmlspecialchars($_COOKIE["name"]);

Предположим, что значение куки с именем "name" было установлено ранее.

Результатом выполнения данного примера будет что-то подобное: Привет, Иван


$php_errormsg

$php_errormsg — Предыдущее сообщение об ошибке

Данный функционал объявлен УСТАРЕВШИМ, начиная с PHP 7.2.0 и его использование крайне не рекомендовано.


$HTTP_RAW_POST_DATA

$HTTP_RAW_POST_DATA — Необработанные данные POST

Эта функциональность считается УСТАРЕВШЕЙ с PHP 5.6.0 и УДАЛЕНА в PHP 7.0.0.


$http_response_header

$http_response_header — Заголовки ответов HTTP

Массив (array) $http_response_header похож на функцию get_headers(). При использовании обертки HTTP, $http_response_header будет заполняться заголовками ответа HTTP. $http_response_header будет создан в локальной области видимости.

function get_contents() {
	file_get_contents("http://example.com");
	var_dump($http_response_header);
}

get_contents();

var_dump($http_response_header);

/*
	array(14) {
		[0] => string(15) "HTTP/1.0 200 OK"
		[1] => string(20) "Accept-Ranges: bytes"
		[2] => string(11) "Age: 143858"
		[3] => string(29) "Cache-Control: max-age=604800"
		[4] => string(38) "Content-Type: text/html; charset=UTF-8"
		[5] => string(35) "Date: Wed, 17 Jun 2020 09:00:14 GMT"
		[6] => string(18) "Etag: "3147526947""
		[7] => string(38) "Expires: Wed, 24 Jun 2020 09:00:14 GMT"
		[8] => string(44) "Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT"
		[9] => string(22) "Server: ECS (dcb/7F5C)"
		[10] => string(21) "Vary: Accept-Encoding"
		[11] => string(12) "X-Cache: HIT"
		[12] => string(20) "Content-Length: 1256"
		[13] => string(17) "Connection: close"
	}
	
	NULL
*/

$argc

$argc — Количество аргументов, переданных скрипту

Содержит количество аргументов, переданных текущему скрипту при запуске из командной строки.

Имя файла скрипта всегда передаётся в качестве первого аргумента, таким образом минимальное значение $argc равно 1.

var_dump($argc);

Запустим пример в командной строке:

php script.php arg1 arg2 arg3

Результатом выполнения данного примера будет что-то подобное:

int(4)

$argv

$argv — Массив переданных скрипту аргументов

Содержит массив (array) всех аргументов, переданных скрипту при запуске из командной строки.

Первый аргумент $argv[0] всегда содержит имя файла запущенного скрипта.

var_dump($argv);

Запустим пример в командной строке:

php script.php arg1 arg2 arg3

Результатом выполнения данного примера будет что-то подобное:

array(4) {
	[0] => string(10) "script.php"
	[1] => string(4) "arg1"
	[2] => string(4) "arg2"
	[3] => string(4) "arg3"
}