Суперглобальные переменные PHP: переменная $_REQUEST
Переменная $_REQUEST в PHP объединяет данные из $_GET, $_POST и $_COOKIE в одном массиве. Узнайте, как её использовать правильно и безопасно.
В PHP существует множество встроенных переменных, называемых суперглобальными, которые обеспечивают удобный доступ к данным из различных источников в ваших скриптах. Одной из наиболее часто используемых суперглобальных переменных является $_REQUEST — она объединяет значения переменных $_GET, $_POST и $_COOKIE в единый массив.
В этой статье мы подробнее рассмотрим переменную $_REQUEST, её свойства, варианты применения и рекомендации по работе с ней в PHP-скриптах.
Что такое переменная $_REQUEST?
Переменная $_REQUEST — это PHP суперглобальная переменная, ассоциативный массив, который автоматически доступен в любой области видимости вашего скрипта. Она содержит данные, переданные на сервер различными способами: через GET- и POST-запросы, а также через куки. Переменная объединяет данные из $_GET, $_POST и $_COOKIE в единый массив.
Порядок слияния этих источников определяется директивами request_order и variables_order в файле php.ini. Это важно, поскольку если один и тот же ключ присутствует в нескольких источниках, побеждает последний источник, указанный в request_order. По умолчанию в большинстве современных установок используется значение GP (GET, затем POST): значения POST перезаписывают значения GET с тем же именем, а куки не включаются вовсе:
; php.ini
request_order = "GP" ; only $_GET and $_POST feed $_REQUESTПоскольку это поведение зависит от конфигурации сервера, никогда не предполагайте, что $_REQUEST содержит данные из куки, не убедившись в значении параметра request_order.
Когда использовать переменную $_REQUEST
Переменная $_REQUEST удобна, когда нужно получить данные, переданные клиентом, независимо от использованного метода. Например, при обработке формы, отправленной пользователем, вы можете использовать $_REQUEST для доступа к переданным значениям, не зная, какой метод использовался — GET или POST.
Хотя $_REQUEST может содержать данные куки, для большей ясности и безопасности принято обращаться к кукам напрямую через $_COOKIE.
Как получить данные из переменной $_REQUEST
Для доступа к данным переменной $_REQUEST используется обычная нотация массива: укажите ключ, соответствующий нужному значению. Например, если в форме есть текстовое поле с именем "username", получить отправленное значение можно следующим образом:
Базовый пример чтения значения
$username = $_REQUEST['username'];
// Always validate and sanitize input before useПоскольку ключ может отсутствовать (например, при первой загрузке страницы до отправки формы), сначала проверьте его наличие. Самый удобный способ задать значение по умолчанию — оператор объединения с null (??):
$username = $_REQUEST['username'] ?? 'guest';
echo "Hello, " . htmlspecialchars($username);Если забыть о проверке наличия ключа и он окажется отсутствующим, PHP выдаст предупреждение Undefined array key — поэтому всегда защищайте обращения к массиву.
Полный пример с формой
Настоящая ценность $_REQUEST состоит в том, что один и тот же обработчик работает независимо от того, использует ли форма method="get" или method="post". Пример ниже отображает форму и обрабатывает её данные независимо от метода:
<?php
// handler.php
if (isset($_REQUEST['name'])) {
// Never trust raw input — escape it before output
$name = htmlspecialchars(trim($_REQUEST['name']));
echo "Welcome, {$name}!";
}
?>
<form method="post" action="handler.php">
<input type="text" name="name" placeholder="Your name">
<button type="submit">Submit</button>
</form>Замените method="post" на method="get" — PHP-код при этом не изменится. Именно в этом и заключается удобство $_REQUEST.
$_REQUEST против $_GET против $_POST
| Суперглобальная переменная | Источник данных | Используйте когда |
|---|---|---|
$_GET | Строка запроса URL (?key=value) | Вы знаете, что данные передаются через URL (ссылки, поиск). |
$_POST | Тело HTTP-запроса | Вы обрабатываете отправку форм, загрузку файлов или действия, изменяющие состояние. |
$_REQUEST | $_GET + $_POST (+ $_COOKIE при соответствующей конфигурации) | Метод заранее неизвестен и нужно принимать оба варианта. |
Подробнее о специализированных массивах читайте в главах $_GET и $_POST, а также в разделе обработка форм PHP с полными примерами.
Рекомендации по работе с переменной $_REQUEST
При работе с переменной $_REQUEST важно следовать ряду рекомендаций, обеспечивающих безопасность и надёжность скриптов. Основные из них:
- Проверяйте и санируйте все данные, полученные от клиента, чтобы убедиться в их безопасности.
- Отдавайте предпочтение конкретным суперглобальным переменным —
$_GETили$_POST— когда метод запроса известен: в современном PHP использование$_REQUESTв целом не рекомендуется из-за возможного загрязнения параметров и неоднозначности. - Не используйте
$_REQUESTпри работе с конфиденциальными данными, такими как пароли или другая секретная информация, во избежание угроз безопасности. - Используйте функции фильтрации PHP (например,
filter_input()илиfilter_var()) для структурированной и многократно используемой проверки и санации входных данных. - Для работы с куки обращайтесь напрямую к
$_COOKIE, а для данных сессии — к$_SESSION: ни те, ни другие не должны использоваться в путях кода, подверженных загрязнению запросами.
Заключение
Переменная $_REQUEST предоставляет единый способ доступа к данным клиента независимо от метода передачи. Понимание её зависимости от конфигурации, потенциальных неоднозначностей и рекомендаций по безопасности позволит эффективно использовать её в PHP-скриптах. Хотя в современной разработке обычно предпочитают явное использование $_GET или $_POST, переменная $_REQUEST остаётся полезным инструментом для работы со смешанными источниками ввода при правильной конфигурации.