Суперглобальный массивы были введены в PHP 4.1.0 и являются встроенными переменные, которые всегда доступны во всех областях.
PHP Глобальные переменные - суперглобальный массив
Некоторые предопределённые переменные в PHP являются "суперглобальными", что означает, что они доступны в любом месте скрипта. Нет необходимости использовать синтаксис global $variable; для доступа к ним в функциях и методах. Вы можете получить к ним доступ из любой функции, класса или файла без необходимости делать что-либо особенное.
PHP Суперглобальные переменные:
$GLOBALS
$_SERVER
$_REQUEST
$_POST
$_GET
$_FILES
$_ENV
$_COOKIE
$_SESSION
PHP $GLOBALS
$GLOBALS - суперглобальная переменная PHP, которая используется для доступа к глобальным переменным из любого места в PHP скрипте (внутри функций или методах).
Все PHP глобальные переменные хранятся в массиве [index]. index содержит имя переменной.
В приведенном ниже примере показано, как использовать суперглобальную переменную $GLOBALS:
Пример
<?php
$x = 75;
$y = 25;
function addition() {
$GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}
addition();
echo $z;
?>
В приведенном выше примере, поскольку z является переменной, присутствующей в $GLOBALS как массив, он также доступен снаружи функции!
PHP $_SERVER
$_SERVER - суперглобальная переменная PHP, которая содержит сведения о заголовках, пути и расположения сценариев.
В приведенном ниже примере показано, как использовать некоторые из элементов в $_SERVER:
Пример
<?php
echo $_SERVER['PHP_SELF'];
echo "<br>";
echo $_SERVER['SERVER_NAME'];
echo "<br>";
echo $_SERVER['HTTP_HOST'];
echo "<br>";
echo $_SERVER['HTTP_REFERER'];
echo "<br>";
echo $_SERVER['HTTP_USER_AGENT'];
echo "<br>";
echo $_SERVER['SCRIPT_NAME'];
?>
В следующей таблице перечислены наиболее важные элементы, которые могут находится внутри $_SERVER:
$_SERVER['PHP_SELF'] - Возвращает имя текущего выполняемого скрипта
$_SERVER['GATEWAY_INTERFACE'] - Возвращает версию интерфейса общего шлюза (CGI) сервер с помощью
$_SERVER['SERVER_ADDR'] - Возвращает IP-адрес хост-сервера
$_SERVER['SERVER_NAME'] - Возвращает имя хост-сервера например,(www.schoolsw3.com)
$_SERVER['SERVER_SOFTWARE'] - Возвращает строку идентификации сервера например,( Apache/2.2.24)
$_SERVER['SERVER_PROTOCOL'] - Возвращает имя и Версию информационного протокола, например,( HTTP/1.1)
$_SERVER['REQUEST_METHOD'] - Возвращает метод запроса, используемый для доступа к странице например,( POST)
$_SERVER['REQUEST_TIME'] - Возвращает метку времени начала запроса например,( 1377687496)
$_SERVER['QUERY_STRING'] - Возвращает строку запроса, если страница доступна через строку запроса
$_SERVER['HTTP_ACCEPT'] - Возвращает заголовок Accept из текущего запроса
$_SERVER['HTTP_ACCEPT_CHARSET'] - Возвращает заголовок Accept_Charset из текущего запроса например,( utf-8,ISO-8859-1)
$_SERVER['HTTP_HOST'] - Возвращает заголовок узла из текущего запроса
$_SERVER['HTTP_REFERER'] - Возвращает полный URL-адрес текущей страницы (не надежный, потому что не все пользовательские агенты поддерживают его)
$_SERVER['HTTPS'] - Является ли скрипт запросом через безопасный протокол HTTP
$_SERVER['REMOTE_ADDR'] - Возвращает IP-адрес, с которого пользователь просматривает текущую страницу
$_SERVER['REMOTE_HOST'] - Возвращает имя хоста, с которого пользователь просматривает текущую страницу
$_SERVER['REMOTE_PORT'] - Возвращает порт, используемый на компьютере пользователя для связи с веб-сервер
$_SERVER['SCRIPT_FILENAME'] - Возвращает абсолютный путь текущего выполняемого сценария
$_SERVER['SERVER_ADMIN'] - Возвращает значение, заданное директиве SERVER_ADMIN на веб-сервере файл конфигурации (если скрипт выполняется на виртуальном хосте, это будет значение определено для этого виртуального хоста) например,( someone@schoolsw3.com)
$_SERVER['SERVER_PORT'] - Возвращает порт на серверном компьютере, используемом веб-сервером для связи например,(80)
$_SERVER['SERVER_SIGNATURE'] - Возвращает версию сервера и имя виртуального хоста, которые добавляются к странице, созданные сервером
$_SERVER['PATH_TRANSLATED'] - Возвращает путь на основе файловой системы к текущему сценарию
$_SERVER['SCRIPT_NAME'] - Возвращает путь текущего сценария
$_SERVER['SCRIPT_URI'] - Возвращает URI текущей страницы
PHP $_REQUEST - используется для сбора данных после отправки HTML формы.
В примере ниже показана форма с полем ввода и кнопкой отправки. Когда пользователь отправляет данные, нажав кнопку "Submit", данные формы отправляются в файл, указанный в атрибуте действия тега form. В этом примере мы укажим на сам файл для обработки данных формы. Если Вы хотите использовать другой PHP файл для обработки данных формы, заменить на имя файла выбор. Затем Вы можем использовать суперглобальную переменную $_REQUEST для сбора значение входного поля:
Пример
<html>
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Имя: <input type="text" name="fname">
<input type="submit">
</form>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// собрать значение входного поля
$name = $_REQUEST['fname'];
if (empty($name)) {
echo "Имя пустое";
} else {
echo $name;
}
}
?>
</body>
</html>
PHP $_POST
PHP $_POST широко используется для сбора данных формы после отправки формы HTML с method="post". $_POST также широко используется для передачи переменных.
В примере ниже показана форма с полем ввода и кнопкой отправки. Когда пользователь отправляет данные, нажав кнопку "Submit", данные формы отправляются в файл, указанный в атрибуте действия тега form. В этом примере Вы укажите сам файл для обработки данных формы. Если вы хотите использовать другой PHP файл для обработки данных формы, заменить на имя файла выборачно. Затем мы можем использовать суперглобальную переменную $_POST для сбора значение входного поля:
Пример
<html>
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Имя: <input type="text" name="fname">
<input type="submit">
</form>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// собрать значение входного поля
$name = $_POST['fname'];
if (empty($name)) {
echo "Имя пустое";
} else {
echo $name;
}
}
?>
</body>
</html>
PHP $_GET
PHP $_GET также может быть использован для сбора данных формы после отправки HTML формы с method="get".
$_GET может также собирать данные, отправленные в URL.
Предположим, у нас есть HTML страница, содержащая гиперссылку с параметрами:
<html>
<body>
<a href="test_get.php?subject=PHP&web=schoolsW3.com">Тест $GET</a>
</body>
</html>
Когда пользователь нажимает на ссылку "Тест $GET", параметр "subject" и "web" отправляются в файл "test_get.php", затем вы можете получить доступ к их значениям в файле "test_get.php" с $_GET.
Пример ниже показывает код в файле "test_get.php":
Пример
<html>
<body>
<?php
echo "Study" . $_GET['subject'] . " at " . $_GET['web'];
?>
</body>
</html>
Всё, что пользователь может изменить, неправильно написать или не ввести - он однажды изменит, напишет или не введет. Намеренно или случайно - это уже другой вопрос. Но в любом случае, все вводимые данные должны проверяться и перепроверяться. Однажды написанная процедура проверки данных избавит вас от множества проблем и лишней работы по установке и отладке.
$_COOKIES
В массив $_COOKIES автоматически помещаются все cookies, которые получены от браузера.
$_FILES
Ассоциативный массив (array) элементов, загруженных в текущий скрипт через метод HTTP POST.
$_REQUEST
Массив $_REQUEST объединяет три массива: $_POST, $_GET, $_COOKIES. В ранних версиях PHP сюда же входил массив $_FILES, но из соображений безопасности и производительности его исключили. Пользоваться массивом $_REQUEST очень удобно в случаях, когда нет разницы, каким методом был сделан запрос. Например, при постраничном выводе данных номер страницы можно передавать через URL ("index.php?page=3") методом GET, а можно через элемент формы методом POST. И в том и в другом случае переменная page попадёт в массив $_REQUEST.
$_SESSION
Предназначение массива $_SESSION - хранение всех переменных сессии текущего пользователя. Мы подробно рассмотрим механизм сессий в соответствующем уроке.
Глобальные массивы очень удобны в работе, но злоупотреблять ими не стоит, особенно массивом $_SESSION. Если переменной нужна только в локальной области видимости - не надо её делать глобальной. Слишком большое количество "лишних" переменных сильно снижает быстродействие и эффективность скрипта.
$_ENV — Переменные окружения
Ассоциативный массив (array) значений, переданных скрипту через переменные окружения.
Эти значения импортируются в глобальное пространство имён PHP из системных переменных окружения, в котором запущен парсер PHP. Большинство значений передаётся из командной оболочки, под которой запущен PHP, и в разных системах, вероятно, используются разные типы оболочек поэтому окончательный список невозможно представить. Пожалуйста, изучите документацию к вашей командной оболочке для получения списка переменных окружения.
Некоторые переменные окружения включают CGI-переменные, причём их наличие не зависит от того, запущен ли PHP как модуль сервера или как препроцессор CGI.