Comprendere i Superglobal PHP: La variabile $_REQUEST
La variabile $_REQUEST di PHP combina i dati di $_GET, $_POST e $_COOKIE in un unico array. Scopri come usarla in modo sicuro ed efficace.
Il linguaggio PHP dispone di molte variabili integrate, chiamate superglobal, che offrono un modo comodo per accedere ai dati provenienti da diverse fonti nei tuoi script. Uno dei superglobal più comunemente usati è la variabile $_REQUEST, che combina i valori delle variabili $_GET, $_POST e $_COOKIE in un unico array.
In questo articolo approfondiremo la variabile $_REQUEST, esplorandone le proprietà, i casi d'uso e le best practice per lavorarci nei tuoi script PHP.
Cos'è la variabile $_REQUEST?
La variabile $_REQUEST è un superglobal PHP — un array associativo disponibile automaticamente in ogni ambito dello script. Contiene i dati inviati al server tramite vari mezzi, come le richieste GET e POST, oppure i cookie. Combina i dati delle variabili $_GET, $_POST e $_COOKIE in un unico array.
L'ordine in cui queste fonti vengono unite è controllato dalle direttive request_order e variables_order nel file php.ini. Questo è importante perché se la stessa chiave esiste in più di una fonte, vince l'ultima fonte elencata in request_order. Il valore predefinito nella maggior parte delle installazioni moderne è GP (GET, poi POST), il che significa che i valori POST sovrascrivono i valori GET con lo stesso nome, e i cookie non sono inclusi affatto:
; php.ini
request_order = "GP" ; only $_GET and $_POST feed $_REQUESTPoiché questo comportamento dipende dalla configurazione del server, non dare mai per scontato che $_REQUEST contenga dati dei cookie a meno che tu non abbia verificato l'impostazione request_order.
Quando usare la variabile $_REQUEST
La variabile $_REQUEST è utile quando si desidera accedere ai dati inviati dal client, indipendentemente dal metodo utilizzato. Ad esempio, se vuoi elaborare un modulo inviato dall'utente, puoi usare la variabile $_REQUEST per accedere ai valori inviati nel modulo, senza dover sapere se il modulo è stato inviato con il metodo GET o POST.
Sebbene $_REQUEST possa includere dati dei cookie, è prassi standard accedere ai cookie direttamente tramite $_COOKIE per maggiore chiarezza e sicurezza.
Come accedere ai dati nella variabile $_REQUEST
Per accedere ai dati nella variabile $_REQUEST, si utilizza semplicemente la notazione array, fornendo la chiave corrispondente al valore che si vuole recuperare. Ad esempio, se hai un modulo con un campo di testo chiamato "username", puoi accedere al valore inviato nel campo nel seguente modo:
Esempio base di lettura di un valore
$username = $_REQUEST['username'];
// Always validate and sanitize input before usePoiché una chiave potrebbe essere assente (ad esempio, al primo caricamento della pagina prima che un modulo venga inviato), verifica prima che esista. L'operatore di coalescenza null (??) è il modo più pulito per fornire un valore predefinito:
$username = $_REQUEST['username'] ?? 'guest';
echo "Hello, " . htmlspecialchars($username);Se dimentichi il controllo dell'esistenza e la chiave è assente, PHP emette un avviso Undefined array key — quindi proteggi sempre le tue letture.
Un esempio completo con un modulo
Il vero vantaggio di $_REQUEST è che lo stesso gestore funziona sia che il modulo utilizzi method="get" che method="post". L'esempio seguente visualizza un modulo ed elabora il suo input indipendentemente dal metodo:
<?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>Cambia method="post" in method="get" e il codice PHP non cambia — questa è esattamente la comodità offerta da $_REQUEST.
$_REQUEST vs $_GET vs $_POST
| Superglobal | Fonte dei dati | Usare quando |
|---|---|---|
$_GET | Stringa di query URL (?key=value) | Si sa che i dati arrivano tramite URL (link, ricerche). |
$_POST | Corpo della richiesta HTTP | Si gestiscono invii di moduli, caricamenti o azioni che modificano lo stato. |
$_REQUEST | $_GET + $_POST (+ $_COOKIE, in base alla configurazione) | Il metodo è genuinamente sconosciuto e si deve accettare entrambi. |
Per ulteriori informazioni sugli array dedicati, consulta i capitoli $_GET e $_POST, e la gestione dei moduli PHP per esempi completi.
Best practice per lavorare con la variabile $_REQUEST
Quando si lavora con la variabile $_REQUEST, è importante seguire alcune best practice per garantire che gli script siano sicuri e affidabili. Alcune delle best practice per lavorare con la variabile $_REQUEST includono:
- Validare e sanificare tutti i dati ricevuti dal client per garantire che siano sicuri da usare negli script.
- Preferire superglobal specifici come
$_GETo$_POSTquando il metodo di richiesta è noto, poiché$_REQUESTè generalmente sconsigliato nel PHP moderno a causa del potenziale inquinamento dei parametri e dell'ambiguità. - Evitare di usare la variabile
$_REQUESTquando si gestiscono dati sensibili, come password o altre informazioni riservate, per prevenire rischi di sicurezza. - Usare le funzioni filter di PHP (ad esempio
filter_input()ofilter_var()) per validare e sanificare l'input in modo strutturato e riutilizzabile. - Per i cookie, leggere
$_COOKIEdirettamente; per i dati di sessione usare$_SESSION— nessuno dei due appartiene a percorsi di codice soggetti all'inquinamento delle richieste.
Conclusione
La variabile $_REQUEST fornisce un modo unificato per accedere ai dati del client indipendentemente dal metodo di invio. Comprendendo le sue dipendenze dalla configurazione, le potenziali ambiguità e le best practice di sicurezza, puoi usarla efficacemente nei tuoi script PHP. Sebbene lo sviluppo moderno spesso favorisca l'uso esplicito di $_GET o $_POST, $_REQUEST rimane uno strumento utile per gestire fonti di input miste quando configurato correttamente.