PHP Conference Nagoya 2025

Qualcosa di utile

Andiamo a fare qualcosa di leggermente più utile. Andremo a controllare che tipo di browser sta utilizzando la persona che visita le nostre pagine. Per fare questo si andrà a controllare la stringa dell'user agent che il browser invia come parte della richiesta HTTP. Quest'informazione viene inviata in una variabile. Le Variabili iniziano sempre con il simbolo del dollaro in PHP. La variabile alla quale ci riferiamo adesso è $_SERVER["HTTP_USER_AGENT"].

Nota:

$_SERVER è una variabile speciale riservata a PHP la quale contiene tutte le informazioni relative al Web Server. È conosciuta come Variabile autoglobale (o Superglobale). Per maggiori informazioni è possibile vedere la pagina del manuale relativa alle Variabili Autoglobali. Questo tipo di variabili è stato introdotto nella versione » 4.1.0 di PHP. Nelle versioni precedenti abbiamo utilizzato gli ormai vecchi array $HTTP_*_VARS, come $HTTP_SERVER_VARS. Dal PHP 5.4.0 queste variabili sono state rimosse. (Potete guardare nelle note del vecchio codice.)

Per visualizzare questa variabile, dobbiamo semplicemente:

Example #1 Stampare a video una variable (un elemento d'Array)

<?php
echo $_SERVER["HTTP_USER_AGENT"];
?>

L'output (risultato) di questo script potrebbe essere:


Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)

Ci sono molti types (tipi) di variabili disponibili in PHP. Nell'esempio di sopra abbiamo stampato un elemento di un Array. Gli Array possono essere molto utili.

$_SERVER è soltanto una variabile che automaticamente viene resa diponibile da PHP. È possibile visualizzare una lunga lista nella sezione Variabili riservate del manuale oppure ottenere la lista completa cercando nell'output della funzione phpinfo() utilizzata nell'esempio della precedente sezione.

Si possono inserire istruzioni PHP multiple all'interno di un tag PHP e creare piccoli blocchi di codice che fanno più di un singolo echo. Per esempio, se si volesse controllare se l'utente usa Internet Explorer si potrebbe fare questo:

Example #2 Esempi usando le strutture di controllo e le funzioni

<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE) {
echo
'Stai usando Internet Explorer<br />';
}
?>

L'output di esempio di questo script potrebbe essere:

Stai usando Internet Explorer<br />

Qui introduciamo un paio di nuovi concetti. Abbiamo l'istruzione if (se). Se avete una conoscenza con la sintassi di base usata dal linguaggio C, questo dovrebbe sembrare logico per voi. In caso contrario, dovreste probabilmente prendere qualsiasi libro introduttivo di PHP e leggere i primi capitoli, o leggere la parte del manuale relativa ai Riferimenti del Linguaggio.

Il secondo concetto che abbiamo introdotto era la chiamata alla funzione strpos(). Questa è una funzione sviluppata in PHP che cerca una stringa all'interno di un'altra stringa. In questo caso abbiamo cercato 'MSIE' (cosiddetta occorrenza) all'interno della stringa $_SERVER["HTTP_USER_AGENT"] (cosiddetta haystack). Se la stringa viene trovata all'interno dell'haystack, la funzione restituisce la posizione dell'occorrenza relativa all'inizio dell'haystack. Altrimenti, restituisce false. Se non restituisce false, l'espressione if viene valutata come true ed il codice all'interno dei relativi {braces} (sostegni) sarà eseguito. Altrimenti, il codice non sarà eseguito. Sentitevi liberi di generare esempi simili, con if, else (altrimenti), ed altre funzioni quali strtoupper() e strlen(). Ogni pagina del manuale, relativa a queste funzioni contiene anche degli esempi pratici. Se non sei sicuro di come utilizzare queste funzioni, vorrai leggere le pagine del manuale su come leggere una definizione di funzione e la sezione sulle funzioni PHP.

Possiamo fare un passo avanti e mostrarvi come potete entrare ed uscite dal modo PHP anche dall' interno di un blocco PHP:

Example #3 Intercalare i modi PHP e HTML

<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE) {
?>
<h3>strpos() dovrebbe ritornare non-false</h3>
<b>Stai usando Internet Explorer</b>
<?php
} else {
?>
<h3>strpos() dovrebbe ritornare false</h3>
<b>Non stai usando Internet Explorer</b>
<?php
}
?>

L'output di esempio di questo script potrebbe essere:

<h3>strpos() dovrebbe ritornare non-false</h3>
<b>Stai usando Internet Explorer</b>

Invece di usare la dichiarazione echo per fare l'output di qualcosa, saltiamo fuori dalla modalità PHP inviando soltanto HTML puro. Il punto importante da notare qui è che il flusso logico dello script rimane intatto. Solo uno dei blocchi di HTML finirà per essere inviato come risposta, dipendendo dal risultato di strpos(). In altre parole, dipende se la stringa MSIE viene trovata o meno.

add a note

User Contributed Notes 1 note

up
170
Declan Kelly
10 years ago
Please note that Internet Explorer 11 no longer contains MSIE in its user agent string, for example on Windows 8 with IE11 I get the following:

Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko

So if you want to include a test for IE11, the code above changes to:

<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE ||
strpos($_SERVER['HTTP_USER_AGENT'], 'Trident') !== FALSE) {
echo
'You are using Internet Explorer.<br />';
}
?>
To Top