W3docs

Суперглобальные переменные 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 остаётся полезным инструментом для работы со смешанными источниками ввода при правильной конфигурации.

Практика

Практика
Какие глобальные массивы предоставляет PHP для работы с данными, переданными через HTTP-запросы?
Какие глобальные массивы предоставляет PHP для работы с данными, переданными через HTTP-запросы?
Was this page helpful?