Ta strona używa ciasteczek (cookies), dzięki którym nasz serwis może działać lepiej. Dowiedz się więcej OK, rozumiem
WebHelp.pl Warsztat Artykuły Pobieranie informacji o przeglądarce i systemie operacyjnym

Warsztat / Artykuły i tutoriale

Pobieranie informacji o przeglądarce i systemie operacyjnym

Bartosz Romanowski 21 stycznia 2011 komentarze ()

Tagi:PHP porady

Jak za pomocą PHP pobrać informacje o przeglądarce i systemie operacyjnym użytkownika wie chyba nawet najbardziej początkujący programista. Jednak poprawna interpretacja zawartości przekazywanej przez przeglądarkę zmiennej user_agent nie jest już taka trywialna. Na szczęście mamy na to proste i skuteczne metody.

Zmienna $_SERVER['HTTP_USER_AGENT'] zawiera między innymi informacje o przeglądarce i systemie operacyjnym użytkownika. Jej zawartość nie jest jednak prosta do poprawnego zinterpretowania, głównie przez brak standardów jeśli chodzi o ilość i układ danych. Istnieje co najmniej kilka gotowych klas, które na podstawie specjalnie przygotowanych reguł wyciągają odpowiednie informacje, ale rozwiązania takie są zwykle dalekie od doskonałości. Warto jednak zwrócić uwagę na Browser Capabilities Project - prowadzony od 1998 roku projekt, którego celem jest udostępnianie możliwie aktualnego pliku browscap.ini.

Czym jest plik browscap.ini?

Browscap.ini to plik wymyślony przez Microsoft na potrzeby serwera WWW, który w teorii miał zawierać zawsze aktualne informacje pozwalające na identyfikację przeglądarki użytkownika, tak aby twórcy stron wiedzieli na co mogą sobie pozwolić. Niestety, plik ten nigdy nie był odpowiednio uaktualniany, co sprawiło, że zawarte w nim informacje stały się praktycznie bezużyteczne. Jednak człowiek imieniem Gary Keith uznał, że szkoda aby taki pomysł się zmarnował i po dzień dzisiejszy uaktualnia browscap.ini, udostępniając go nieodpłatnie wszystkim zainteresowanym. Warto dodać, że aktualnie plik zawiera również informacje o botach, takich jak Googlebot czy Bingbot.

Identyfikacja przeglądarki i systemu operacyjnego

Plik jest udostępniany w kilku formatach, między innymi w wersji przeznaczonej dla PHP. My oczywiście nie będziemy samodzielnie parsować informacji w nim zawartych, a skorzystamy z klasy, którą udostępnia Jonathan Stoppani. Jest ona o tyle wygodna w użyciu, że automatycznie pobiera aktualny plik browscap.ini i generuje "przyjazną" dla PHP jego wersję, znacznie szybszą w użyciu niż oryginalny format danych.

W pobranym z repozytorium archiwum znajdziemy plik Browscap.php, który należy umieścić w wybranym miejscu na serwerze (w dalszej części zakładam, że znajduje się on w tym samym katalogu co nasz skrypt). Dobrze jest również utworzyć katalog, do którego klasa zapisze pobrany plik browscap.ini oraz utworzony przez siebie plik cache.php.

Najprostszy skrypt wykorzystujący klasę Browscap może wyglądać tak:

Kod: Zaznacz cały
require('Browscap.php');

// jako parametr podajemy katalog dla plików browscap.ini i cache.php
$browscap = new Browscap('cache');
$current_browser = $browscap->getBrowser();

var_dump($current_browser);

Po wpisaniu adresu tego skryptu w przeglądarce zostanie wyświetlona zawartość obiektu z informacjami wyciągniętymi ze zmiennej $_SERVER['HTTP_USER_AGENT']. Wygląda to mniej więcej tak:

Kod: Zaznacz cały
object(stdClass)[2]
  public 'browser_name' => string 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; pl; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 (.NET CLR 3.5.30729)' (length=115)
  public 'browser_name_regex' => string '^mozilla/5.0 (macintosh; .*; .*mac os x.*; .*; rv:1.9.2.*) gecko/.* firefox/3.6.*$' (length=89)
  public 'browser_name_pattern' => string 'Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.9.2*) Gecko/* Firefox/3.6*' (length=73)
  public 'Parent' => string 'Firefox 3.6' (length=11)
  public 'Platform' => string 'MacOSX' (length=6)
  public 'Browser' => string 'Firefox' (length=7)
  public 'Version' => string '3.6' (length=3)
  public 'MajorVer' => int 3
  public 'MinorVer' => int 6
  public 'Frames' => boolean true
  public 'IFrames' => boolean true
  public 'Tables' => boolean true
  public 'Cookies' => boolean true
  public 'JavaApplets' => boolean true
  public 'JavaScript' => boolean true
  public 'CssVersion' => int 3
  public 'supportsCSS' => boolean true
  public 'Alpha' => boolean false
  public 'Beta' => boolean false
  public 'Win16' => boolean false
  public 'Win32' => boolean false
  public 'Win64' => boolean false
  public 'BackgroundSounds' => boolean false
  public 'CDF' => boolean false
  public 'VBScript' => boolean false
  public 'ActiveXControls' => boolean false
  public 'isBanned' => boolean false
  public 'isMobileDevice' => boolean false
  public 'isSyndicationReader' => boolean false
  public 'Crawler' => boolean false
  public 'AOL' => boolean false
  public 'aolVersion' => int 0

Jak widać, zakres zwracanych przez klasę informacji jest bardzo szeroki. Poza nazwą i wersją przeglądarki (Browser i Version) użyteczne mogą być: Platform - system operacyjny użytkownika JavaScript i Cookies - czy przeglądarka obsługuje JavaScript i ciasteczka (cookies); trzeba pamiętać, że oznacza to, że dana przeglądarka potrafi obsłużyć JavaScript i przyjmować ciasteczka, nie wiemy jednak, czy użytkownik przypadkiem nie wyłączył tych funkcji w ustawieniach supportCSS i CssVersion - czy przeglądarka obsługuje arkusze stylów CSS i obsługiwana wersja CSS isMobileDevice - czy mamy do czynienia z przeglądarką mobilną (np. w telefonie komórkowym czy palmtopie) isSyndicationReader - czy przeglądarka jest czytnikiem RSS Crawler - czy przeglądarka jest botem (np. Googlebot)

Dodatkowa konfiguracja

Klasa Browscap ma kilka opcji konfiguracyjnych, z których najużyteczniejszą jest możliwość wyłączenia automatycznej aktualizacji pliku browscap.ini. Aby to zrobić należy zmodyfikować wartość następujących atrybutów klasy:

Kod: Zaznacz cały
// wyłączenie automatycznych aktualizacji
public $doAutoUpdate	= false;
// lokalizacja pliku browscap.ini
public $localFile		= 'cache/browscap.ini';

Przy takim ustawieniu konieczne będzie samodzielne aktualizowanie pliku browscap.ini (po aktualizacji należy usunąć plik cache.php).

Można również zmienić częstotliwość automatycznych aktualizacji:

Kod: Zaznacz cały
public $updateInterval	= 432000;  // czas pomiędzy aktualizacjami (w sekundach)

Masz pytania lub wątpliwości? Odwiedź nasze forum dyskusyjne.

Bartosz Romanowski

Programista, gadżeciarz, krytyczny miłośnik produktów Apple, fan ciężkich brzmień i niepoprawny pesymista.


Komentarze


HTML CSS JavaScript PHP bazy danych MySQL Flash grafika framework hosting domeny pozycjonowanie wordpress Facebook