W3docs

Entendendo as Superglobais do PHP: A Variável $_REQUEST

Aprenda como a variável $_REQUEST do PHP combina dados de $_GET, $_POST e $_COOKIE, com exemplos práticos e boas práticas de segurança.

A linguagem PHP possui muitas variáveis integradas, chamadas de superglobais, que fornecem uma maneira conveniente de acessar dados de diversas fontes em seus scripts. Uma das superglobais mais utilizadas é a variável $_REQUEST, que combina os valores das variáveis $_GET, $_POST e $_COOKIE em um único array.

Neste artigo, vamos nos aprofundar na variável $_REQUEST, explorando suas propriedades, casos de uso e boas práticas para trabalhar com ela em seus scripts PHP.

O que é a Variável $_REQUEST?

A variável $_REQUEST é uma superglobal do PHP — um array associativo automaticamente disponível em todos os escopos do seu script. Ela contém dados enviados ao servidor por diversos meios, como requisições GET e POST, ou cookies. Ela combina os dados das variáveis $_GET, $_POST e $_COOKIE em um único array.

A ordem em que essas fontes são mescladas é controlada pelas diretivas request_order e variables_order no php.ini. Isso é importante porque, se a mesma chave existir em mais de uma fonte, a última fonte listada em request_order prevalece. O padrão na maioria das instalações modernas é GP (GET, depois POST), o que significa que os valores POST sobrescrevem os valores GET com o mesmo nome, e os cookies não são incluídos:

; php.ini
request_order = "GP"   ; only $_GET and $_POST feed $_REQUEST

Como esse comportamento depende da configuração do servidor, nunca presuma que $_REQUEST contém dados de cookies sem verificar a configuração de request_order.

Quando Usar a Variável $_REQUEST

A variável $_REQUEST é útil quando você deseja acessar dados enviados pelo cliente, independentemente do método utilizado. Por exemplo, se você quiser processar um formulário enviado pelo usuário, pode usar a variável $_REQUEST para acessar os valores enviados no formulário, sem precisar saber se ele foi submetido pelo método GET ou POST.

Embora $_REQUEST possa incluir dados de cookies, é prática padrão acessar os cookies diretamente via $_COOKIE para maior clareza e segurança.

Como Acessar Dados na Variável $_REQUEST

Para acessar os dados na variável $_REQUEST, basta usar a notação de array, fornecendo a chave que corresponde ao valor que você deseja recuperar. Por exemplo, se você tiver um formulário com um campo de texto chamado "username", pode acessar o valor enviado no campo da seguinte forma:

Exemplo básico de leitura de um valor

$username = $_REQUEST['username'];
// Always validate and sanitize input before use

Como uma chave pode estar ausente (por exemplo, no primeiro carregamento da página antes de um formulário ser enviado), verifique primeiro se ela existe. O operador de coalescência nula (??) é a maneira mais limpa de fornecer um valor padrão:

$username = $_REQUEST['username'] ?? 'guest';
echo "Hello, " . htmlspecialchars($username);

Se você esquecer a verificação de existência e a chave estiver ausente, o PHP emite um aviso Undefined array key — portanto, sempre proteja suas leituras.

Um exemplo completo de formulário

O real valor de $_REQUEST é que o mesmo manipulador funciona independentemente de o formulário usar method="get" ou method="post". O exemplo abaixo renderiza um formulário e processa sua entrada independentemente do método:

<?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>

Troque method="post" por method="get" e o código PHP não muda — essa é precisamente a conveniência que $_REQUEST oferece.

$_REQUEST vs $_GET vs $_POST

SuperglobalFonte de dadosUse quando
$_GETString de consulta da URL (?key=value)Você sabe que os dados chegam via URL (links, pesquisa).
$_POSTCorpo da requisição HTTPVocê processa envios de formulários, uploads ou ações que alteram estado.
$_REQUEST$_GET + $_POST (+ $_COOKIE, conforme configuração)O método é genuinamente desconhecido e você deve aceitar qualquer um.

Para mais informações sobre os arrays dedicados, consulte os capítulos $_GET e $_POST, e tratamento de formulários PHP para exemplos completos.

Boas Práticas para Trabalhar com a Variável $_REQUEST

Ao trabalhar com a variável $_REQUEST, é importante seguir algumas boas práticas para garantir que seus scripts sejam seguros e confiáveis. Algumas das boas práticas para trabalhar com a variável $_REQUEST incluem:

  • Valide e sanitize todos os dados recebidos do cliente para garantir que sejam seguros para uso em seus scripts.
  • Prefira superglobais específicas como $_GET ou $_POST quando o método de requisição é conhecido, pois $_REQUEST é geralmente desencorajado no PHP moderno devido à potencial poluição de parâmetros e ambiguidade.
  • Evite usar a variável $_REQUEST ao manipular dados sensíveis, como senhas ou outras informações confidenciais, para prevenir riscos de segurança.
  • Use as funções de filtro do PHP (por exemplo, filter_input() ou filter_var()) para validar e sanitizar entradas de forma estruturada e reutilizável.
  • Para cookies, leia $_COOKIE diretamente; para dados de sessão use $_SESSION — nenhum deles pertence a caminhos de código sujeitos à poluição de requisições.

Conclusão

A variável $_REQUEST fornece uma maneira unificada de acessar dados do cliente independentemente do método de envio. Ao entender suas dependências de configuração, possíveis ambiguidades e boas práticas de segurança, você pode usá-la efetivamente em seus scripts PHP. Embora o desenvolvimento moderno frequentemente favoreça o uso explícito de $_GET ou $_POST, $_REQUEST continua sendo uma ferramenta útil para lidar com fontes de entrada mistas quando configurada corretamente.

Prática

Prática
Quais são os arrays globais fornecidos no PHP para lidar com dados passados via requisições HTTP?
Quais são os arrays globais fornecidos no PHP para lidar com dados passados via requisições HTTP?
Was this page helpful?