PHP. Предопределённые переменные
PHP предоставляет всем скриптам большое количество предопределённых переменных. Эти переменные содержат всё, от внешних данных до переменных среды окружения, от текста сообщений об ошибках до последних полученных заголовков.
Суперглобальные переменные
Суперглобальные переменные — это встроенные переменные, которые всегда доступны во всех областях видимости.
Некоторые предопределённые переменные в PHP являются «суперглобальными», что означает, что они доступны в любом месте скрипта. Нет необходимости использовать синтаксис global $variable; для доступа к ним в функциях и методах.
Суперглобальными переменными являются:
- $GLOBALS
- $_SERVER
- $_GET
- $_POST
- $_FILES
- $_COOKIE
- $_SESSION
- $_REQUEST
- $_ENV
$GLOBALS — Ссылки на все переменные глобальной области видимости
Ассоциативный массив (array), содержащий ссылки на все переменные, определенные в данный момент в глобальной области видимости скрипта. Имена переменных являются ключами массива.
function test() < $foo = "локальная переменная"; echo '$foo в глобальной области видимости: ' . $GLOBALS["foo"]; echo '$foo в текущей области видимости: ' . $foo; >$foo = "Пример содержимого"; test(); // $foo в глобальной области видимости: Пример содержимого // $foo в текущей области видимости: локальная переменная
$_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 '
' . $arg . ' | ' . $_SERVER[$arg] . ' |
' . $arg . ' | - |
$_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 — $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 — $HTTP_POST_FILES [устаревшее] — Переменные файлов, загруженных по HTTP
Ассоциативный массив (array) элементов, загруженных в текущий скрипт через метод HTTP POST.
$HTTP_POST_FILES содержит ту же начальную информацию, но не является суперглобальным. (Обратите внимание, что $HTTP_POST_FILES и $_FILES являются разными переменными, так что PHP обрабатывает их соответственно).
$_REQUEST — Переменные HTTP-запроса
Ассоциативный массив (array), который по умолчанию содержит данные переменных $_GET, $_POST и $_COOKIE.
$_SESSION — $HTTP_SESSION_VARS [устарело] — Переменные сессии
Ассоциативный массив, содержащий переменные сессии, которые доступны для текущего скрипта.
$HTTP_SESSION_VARS первоначально содержит ту же информацию, но она не является суперглобальной переменной. (Обратите внимание, что $HTTP_SESSION_VARS и $_SESSION являются различными переменными и в таковом качестве обрабатываются PHP).
$_ENV — $HTTP_ENV_VARS [устарело] — Переменные окружения
Ассоциативный массив (array) значений, переданных скрипту через переменные окружения.
Эти значения импортируются в глобальное пространство имен PHP из системных переменных окружения, в котором запущен парсер PHP. Большинство значений передаётся из командной оболочки, под которой запущен PHP, и в разных системах, вероятно, используются разные типы оболочек поэтому окончательный список невозможно представить.
Некоторые переменные окружения включают CGI-переменные, причем их наличие не зависит от того, запущен ли PHP как модуль сервера или как препроцессор CGI.
$HTTP_ENV_VARS содержит те же данные, но не является суперглобальной переменной. (Следует отметить, что $HTTP_ENV_VARS и $_ENV — разные переменные и обрабатываются по-иному).
echo 'Мое имя пользователя: ' .$_ENV["USER"];
Допустим, скрипт запустил «orkhanalyshov»
Результатом выполнения данного примера будет что-то подобное:
Мое имя пользователя: orkhanalyshov
$_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 равно 1.
Запустим пример в командной строке:
php script.php arg1 arg2 arg3
Результатом выполнения данного примера будет что-то подобное:
$argv — Массив переданных скрипту аргументов
Содержит массив (array) всех аргументов, переданных скрипту при запуске из командной строки.
Первый аргумент $argv[0] всегда содержит имя файла запущенного скрипта.
Запустим пример в командной строке:
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" >
Отправка данных на сервер
Самым простым способом передачи данных на сервер приложению PHP извне представляет передача данных через строку запроса.
Строка запроса представляет набор параметров, которые помещаются в адресе после вопросительного знака. При этом каждый параметр определяет название и значение. Например, в адресе:
http://localhost/user.php?name=Tom&age=36
Часть ?name=Tom&age=36 представляет строку запроса, в которой есть два параметра name и age . Для каждого параметра определено имя и значение, которые отделяются знаком равно. Параметр name имеет значение «Tom», а параметр age — значение 36. Друг от друга параметры отделяются знаком амперсанда.
Например, определим следующий скрипт user.php со следующим содержимым:
if(isset($_GET["age"])) < $age = $_GET["age"]; >echo "Имя: $name
Возраст: $age"; ?>
Когда мы вводим в адресную строку браузера некий адрес и нажимаем на оправку, то серверу отправляется запрос типа GET . В PHP по умолчанию определен глобальный ассоциативный массив $_GET , который хранит все значения, передаваемые в запроса GET. Используя ключи передаваемых данных, мы можем из массива $_GET получить передаваемые значения.
При отправки строки запроса ключами в этом массиве будут названия параметров, а значениями — значения параметров.
Например, в строке запроса передается параметр name=Tom . Соответственно, чтобы получить значение параметра name из запроса, обращаемся по соответствующему ключу:
Однако стоит учитывать, что в адресной строке необязательно будет использоваться строка запроса или конкретно данный параметр. Поэтому перед получением значения параметра сначала смотрим, а передан ли вообще такой параметр:
Теперь обратимся к этому скрипту, например, так http://localhost/user.php?name=Tom&age=36 :
GET в PHP и строка запроса»/>GET в PHP и строка запроса»/>
Если мы не передадим значения какого-либо параметра, то соответствующая переменная будет использовать значение по умолчанию: