PHP

$_SERVER

Spiegazione dettagliata della variabile superglobale $_SERVER in PHP con esempi pratici.

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.


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.