/
Variabili

Variabili superglobali

01. 11. 2019

Obsah článku

Le variabili superglobali sono usate per passare lo stato globale dell'applicazione e la comunicazione HTTP.

Il vantaggio principale di queste variabili è che sono sempre e ovunque disponibili. In pratica, sono array di valori in cui si accede a informazioni specifiche per indice. In diversi contesti, la disponibilità delle chiavi può variare (spiegato di seguito).

Tipi di variabili superglobali

Tutti i superglobal in PHP sono array e sono denotati da un segno di dollaro seguito da un trattino basso (eccetto $GLOBALS) e da caratteri maiuscoli.

In PHP 7 ci sono in particolare le seguenti:

Variabile Descrizione
$_GET Parametri URL inviato dal metodo GET
$_POST Dati del modulo inviato da POST. Nota che può comportarsi diversamente in ajax.
$_REQUEST Dati del modulo inviati da qualsiasi metodo ($_GET, $_POST e $_REQUEST).
$_FILES Informazioni tecniche sui file attualmente caricati, per esempio tramite il costrutto <input type="file">.
$_SERVER Impostazioni del server web, indirizzo IP, configurazione... varia a seconda dell'ambiente (quando si chiama uno script PHP da terminale conterrà valori diversi e per esempio le informazioni sulla richiesta corrente saranno mancanti).
$_COOKIE Configurato cookies.
$_SESSION Dati di sessione (session), se esiste ed è stato impostato in passato.
$GLOBALS Attenzione, non contiene un underscore nel nome! Questa è la cosiddetta global-variable e una notazione alternativa per la parola chiave global. Se hai una variabile globale $variabile nella tua applicazione, puoi anche accedervi con il costrutto $GLOBALS["variabile"]. Tuttavia, usare le variabili globali è una soluzione cattiva e impura per progettazione, quindi è meglio non farlo.
$_ENV Informazioni sull'ambiente corrente dove PHP è in esecuzione.

Elencare tutti i valori esistenti è facile da fare:

foreach ($_SERVER as $key => $value {
echo $key . ':' . $value . '<br>';
}

Nota: non tutti gli indici devono sempre esistere (per esempio, se lo script esegue cron in modalità CLI, l'indice con l'URL della pagina o l'indirizzo IP della richiesta non esisterà).

Accesso alle variabili

Raccomando che tutte le variabili globali (tranne $_SESSION) siano di sola lettura. Questo perché contengono dati globali dell'applicazione e altro codice può tenerne conto (per esempio, un'altra libreria installata).

Un altro svantaggio dello stato globale è che non si può sempre fare affidamento sui valori esatti, anche se esistono, quindi si dovrebbe sempre controllare le loro chiavi con il costrutto isset().

Per salvare un nuovo cookie, usate setcookie() e non inserite il valore direttamente. Questo perché è di sola lettura.

Lezioni apprese

Mai fidarsi ciecamente dei valori delle variabili superglobali!

L'utente può usare l'URL e le intestazioni inviate per influenzare il modo in cui i valori sono impostati. Tutti gli input devono sempre essere accuratamente convalidati.

Registrare globals - il problema con la vecchia versione di PHP

Nella vecchia versione di PHP (fino a 5.4.0), c'era una direttiva speciale register-globals (configurabile in php.ini) che faceva sì che tutti i parametri passati in un URL fossero automaticamente registrati come variabili.

Per esempio:

Un utente è arrivato all'URL: https://example.com/script.php?var=24.

E PHP ha creato automaticamente una variabile $var con il valore 24 all'interno dello script.

Quindi ha funzionato in modo classico:

echo $var;

Chiunque potrebbe quindi infilare qualsiasi variabile nello script e cambiarne il contenuto. Ovviamente, la sicurezza non era sempre una priorità. Non proprio.

Altre fonti

Per una descrizione più dettagliata, vedere il manuale ufficiale.

Jan Barášek   Více o autorovi

Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.

Rád vám pomůžu:

Související články

1.
6.