Coś użytecznego

Zróbmy teraz coś bardziej przydatnego. Sprawdzimy jakiego rodzaju przeglądarki używa odwiedzający. W tym celu sprawdzimy łańcuch znaków nazywany user agentem, który przeglądarka wysyła jako część zapytania HTTP. Ta informacja jest trzymana w zmiennej. Zmienne w PHP zawsze zaczynają się od znaku dolara. Zmienna która interesuje nas w tej chwili to $_SERVER['HTTP_USER_AGENT'].

Informacja:

$_SERVER to specjalna zastrzeżona zmienna PHP, która zawiera wszystkie informacje o serwerze WWW. Jest znana jako superglobalna. Zobacz powiązaną stronę manuala o superglobalnych, aby dowiedzieć się więcej. Te specjalne zmienne zostały wprowadzone w PHP » 4.1.0. Wcześniej używano starszych tablic $HTTP_*_VARS, na przykład $HTTP_SERVER_VARS. Od PHP 5.4.0 zostały one usunięte. (Zobacz też notatkę poświęconą staremu kodowi.)

Aby wyświetlić tę zmienną możesz po prostu napisać:

Przykład #1 Wyświetlanie zmiennej (elementu tablicy)

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

Przykładowym wynikiem działania tego skryptu może być:


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

Istnieje wiele typów zmiennych dostępnych w PHP. W powyższym przykładzie wypisaliśmy element tablicy. Tablice mogą być bardzo przydatne.

$_SERVER jest tylko jedną z tablic, które PHP udostępnia Ci automatycznie. Lista jest dostępna w rozdziale Zastrzeżone Zmienne, możesz też zobaczyć ich pełną listę patrząc na wynik działania funkcji phpinfo() użytej w przykładzie w poprzedniej sekcji.

Możesz umieszczać wiele wyrażeń PHP wewnątrz tagu PHP i stworzyć małe bloki kodu, które robią więcej niż pojedyncze wyświetlenie. Jeśli na przykład chcesz sprawdzić czy przeglądarka to Internet Explorer, możesz napisać:

Przykład #2 Przykład użycia struktur kontrolnych i funkcji

<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE) {
    echo 
'Używasz przeglądarki Internet Explorer.<br />';
}
?>

Przykładowym wynikiem działania tego skryptu może być:

Używasz przeglądarki Internet Explorer.<br />

Wprowadzamy tu kilka nowych zagadnień. Mamy wyrażenie if. Jeśli znasz podstawową składnię używaną w C, powinno być to dla Ciebie logiczne. W przeciwnym wypadku powinieneś prawdopodobnie znaleźć książkę wprowadzającą do PHP i przeczytać kilka pierwszych rozdziałów lub zapoznać się z częścią manuala poświęconą opisowi języka.

Drugim zagadnieniem, które wprowadziliśmy jest wywołanie funkcji strpos(). strpos() jest funkcją wbudowaną w PHP, która szuka łańcucha znakow w innym łańcuchu. W tym wypadku szukamy 'MSIE' (tak zwanej igły) w łańcuchu $_SERVER['HTTP_USER_AGENT'] (tak zwanym stogu siana). Jeśli igła zostanie znaleziona w stogu siana, funkcja zwróci pozycję igły względem początku stogu siana. W przeciwnym wypadku zwróci FALSE. Jeśli nie zwróci FALSE, wyrażenie if otrzyma wartość true TRUE a kod w ramach jego {klamr} się wykona. W Przeciwnym wypadku kod nie będzie uruchomiony. Nie bój się tworzyć podobnych przykładów używając if, else i innych funkcji takich jak strtoupper() lub strlen(). Każda powiązana strona tego podręcznika również zawiera przykłady. Jeśli nie jesteś pewien jak używać funkcji, będziesz chciał przeczytać stronę podręcznika o czytaniu definicji funkcji i sekcję poświęconą funkcjom w PHP.

Możemy pójść krok dalej i pokazać jak możesz wskoczyć i wyskoczyć z trybu PHP nawet w środku bloku PHP:

Przykład #3 Mieszanie trybów HTML i PHP

<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE) {
?>
<h3>strpos() zwróciło wartość różną od false</h3>
<p>Używasz przeglądarki Internet Explorer</p>
<?php
} else {
?>
<h3>strpos() zwróciło false</h3>
<p>Nie używasz przeglądarki Internet Explorer</p>
<?php
}
?>

Przykładowym wynikiem działania tego skryptu może być:

<h3>strpos() zwróciło wartość różną od false</h3>
<p>Używasz przeglądarki Internet Explorer</p>

Zamiast używać wyrażenia echo z PHP, aby coś wyświetlić, wyskoczyliśmy z trybu PHP i wprost wysłaliśmy kod HTML. Ważną i potężną rzeczą jest fakt, że przepływ logiczny skryptu zostaje nietknięty. Tylko jeden z bloków HTML zostanie wysłany do odwiedzającego, zależnie od tego czy łańch MSIE zostanie znaleziony czy nie.

add a note add a note

User Contributed Notes 3 notes

up
228
Declan Kelly
9 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 />';
}
?>
up
7
safisiddiqui6 at gmail dot com
3 years ago
In 2021, when we output the HTTP_USER_AGENT using IE, we get :

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.72 Safari/537.36 Edg/89.0.774.45

So In order to look for IE in 2021, we write:

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

Or If we want to include old IEs we can use Declan's Support:

<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE ||
   
strpos($_SERVER['HTTP_USER_AGENT'], 'Trident') !== FALSE) ||
   
strpos($_SERVER['HTTP_USER_AGENT'], 'Edg') !== FALSE {
    echo
'You are using Internet Explorer.<br />';
}
?>
up
0
Evan Z
2 years ago
Hi. Edge is a different browser from IE. You cannot use the condition to judge it is an Internet Explorer. On the contrary, it means this is an Edge browser.

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