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
219
Declan Kelly
6 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
-28
rfantin at coralwood dot com
13 years ago
While it's easy to get carried away mixing your logic and presentation together since it's so easy to do, you're better off using PHP within HTML only to fill in values, or include other source files.

Keep your actual processing in separate libraries that are called before you send any headers to the page. Try to avoid calling a script that retrieves or sets information, or manipulates it in the middle of your HTML. You'll find it's much easier to maintain.
up
-49
Bilal S.
4 years ago
On Edge, the user agent string does not contain 'MSIE' neither 'Trident', but rather 'Edge'.
To Top