In PHP, la variabile superglobale $_SERVER è un array associativo che contiene numerose informazioni sul server web, sull’ambiente di esecuzione, sulla richiesta HTTP e sullo script attualmente in esecuzione.
🔹 Cos'è una variabile superglobale
Le variabili superglobali in PHP (come $_GET, $_POST, $_SESSION, $_COOKIE, ecc.) sono sempre disponibili in qualsiasi parte del codice,
senza bisogno di dichiararle come globali o di passarle a funzioni o classi.
🔹 Struttura di $_SERVER
$_SERVER è un array associativo che contiene coppie chiave-valore: ogni chiave rappresenta una variabile d'ambiente (come intestazioni HTTP, percorsi, metodi di richiesta, ecc.) e il valore corrispondente contiene le informazioni attuali dello script.
🔹 Esempio pratico
<?php
echo "Questo script si trova in: " . $_SERVER["PHP_SELF"] . "<br>";
echo "Host: " . $_SERVER["HTTP_HOST"] . "<br>";
echo "Metodo richiesta: " . $_SERVER["REQUEST_METHOD"] . "<br>";
echo "IP del visitatore: " . $_SERVER["REMOTE_ADDR"] . "<br>";
?>
🔹 Principali chiavi disponibili in $_SERVER
| Chiave | Descrizione | Esempio |
|---|---|---|
$_SERVER["PHP_SELF"] | Percorso dello script corrente, relativo alla root del server. | /index.php |
$_SERVER["SERVER_NAME"] | Nome del server host. | www.miosito.it |
$_SERVER["HTTP_HOST"] | Host HTTP richiesto dal client. | miosito.it |
$_SERVER["REQUEST_METHOD"] | Metodo della richiesta HTTP. | GET, POST |
$_SERVER["REQUEST_URI"] | URI richiesto (tutto dopo il dominio). | /pagina.php?id=5 |
$_SERVER["QUERY_STRING"] | Stringa di query (parte dopo il ?). | id=5&page=2 |
$_SERVER["REMOTE_ADDR"] | Indirizzo IP del client che ha effettuato la richiesta. | 192.168.1.10 |
$_SERVER["HTTP_USER_AGENT"] | Informazioni sul browser e sul sistema operativo del client. | Mozilla/5.0 ... |
$_SERVER["SERVER_PORT"] | Porta del server in ascolto. | 80 o 443 |
$_SERVER["SCRIPT_FILENAME"] | Percorso assoluto dello script PHP in esecuzione. | /var/www/html/index.php |
$_SERVER["DOCUMENT_ROOT"] | Directory principale del server web. | /var/www/html |
$_SERVER["HTTPS"] | Indica se la connessione è sicura (HTTPS attivo). | on |
$_SERVER["SERVER_PROTOCOL"] | Versione del protocollo utilizzata. | HTTP/1.1 |
$_SERVER["SERVER_SOFTWARE"] | Software del server. | Apache/2.4.57 (Unix) |
$_SERVER["SCRIPT_NAME"] | Nome dello script attualmente in esecuzione. | /index.php |
$_SERVER["REQUEST_TIME"] | Timestamp UNIX del momento in cui la richiesta è iniziata. | 1730000000 |
$_SERVER["HTTP_REFERER"] | Pagina web da cui proviene il visitatore (se disponibile). | https://google.com |
🔹 Nota di sicurezza
Non stampare direttamente i valori di $_SERVER nel browser senza filtrarli: possono contenere dati forniti dall'utente.
Usa sempre htmlspecialchars() per evitare vulnerabilità XSS:
<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>
LABORATORIO
Scoprire le informazioni del server con $_SERVER
In questo laboratorio imparerai a utilizzare la variabile $_SERVER per ottenere informazioni sulla richiesta HTTP, sull'ambiente del server e sullo script in esecuzione. Costruiremo una pagina che visualizza in tempo reale i dati forniti dal server.
- Editor di codice (es. Visual Studio Code, PhpStorm o Notepad++)
- Server locale o remoto con PHP (es. XAMPP, MAMP, Laragon)
- Browser web per visualizzare la pagina
1 Creare il file principale
Crea un file chiamato server-info.php. In questo file mostreremo alcune delle informazioni principali disponibili nella variabile $_SERVER.
<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
<title>Laboratorio $_SERVER</title>
</head>
<body>
<h2>Informazioni sul server e sulla richiesta</h2>
<?php
echo "<b>Nome del server:</b> " . $_SERVER["SERVER_NAME"] . "<br>";
echo "<b>Indirizzo IP del client:</b> " . $_SERVER["REMOTE_ADDR"] . "<br>";
echo "<b>Software del server:</b> " . $_SERVER["SERVER_SOFTWARE"] . "<br>";
echo "<b>Metodo di richiesta:</b> " . $_SERVER["REQUEST_METHOD"] . "<br>";
echo "<b>User Agent:</b> " . $_SERVER["HTTP_USER_AGENT"] . "<br>";
echo "<b>Pagina richiesta:</b> " . $_SERVER["REQUEST_URI"] . "<br>";
?>
</body>
</html>
2 Aggiungere una sezione per mostrare tutte le variabili $_SERVER
Ora aggiungiamo una tabella dinamica per visualizzare tutte le coppie chiave-valore contenute in $_SERVER. Questo ti permetterà di capire quali informazioni PHP riceve dal server e dal browser.
<h3>Tutte le variabili $_SERVER</h3>
<table border="1" cellpadding="6" cellspacing="0">
<tr><th>Chiave</th><th>Valore</th></tr>
<?php
foreach ($_SERVER as $chiave => $valore) {
echo "<tr><td>" . htmlspecialchars($chiave) . "</td><td>" . htmlspecialchars($valore) . "</td></tr>";
}
?>
</table>
3 Visualizzare l'URL completo della pagina
Spesso è utile ricostruire l'URL completo della pagina attualmente visualizzata. Ecco come puoi farlo combinando diverse chiavi di $_SERVER:
<?php
$protocollo = (!empty($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] !== "off") ? "https://" : "http://";
$url_completo = $protocollo . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
echo "<p><b>URL completo:</b> " . $url_completo . "</p>";
?>
4 Test e analisi dei risultati
- Apri il file server-info.php nel browser.
- Osserva i valori visualizzati: dipendono dal server, dal browser e dal tipo di richiesta.
- Prova a ricaricare la pagina da un altro dispositivo o browser per confrontare i valori di REMOTE_ADDR e HTTP_USER_AGENT.
5 (Opzionale) Simulare una richiesta POST
Aggiungi un piccolo modulo HTML per inviare una richiesta POST e vedere come cambia $_SERVER["REQUEST_METHOD"].
<form method="post">
<input type="submit" value="Invia richiesta POST">
</form>
<?php
echo "<p><b>Metodo attuale:</b> " . $_SERVER["REQUEST_METHOD"] . "</p>";
?>
Premi il pulsante e osserva come cambia il valore del metodo da GET a POST.