Wygrzebane z GitHuba (4) : PHP User Agent

Dziś w progra­mie lżej­szy zamien­nik dla funk­cji get_browser()PHP User Agent. Za pomocą skryptu jeste­śmy w stanie okre­ślić jakiej prze­glą­darki i systemu opera­cyj­nego użyt­kow­nik używa. Orygi­nalna funk­cja potrze­buje pliku browscap.ini, który obec­nie zajmuje 405KB, co prze­kłada się na szyb­kość dzia­ła­nia. Poza tym istnieje niebez­pie­czeń­stwo, że na serwe­rze produk­cyj­nym nie dadzą nam dostępu do w/w funk­cji. (A przy­naj­mniej tak piszą ;-) )

Całość składa się z dwóch klas. Skrypt nie stosuje prze­strzeni nazw, za to jest całkiem nieźle udoku­men­to­wany. Ponadto jest trochę testów jednostkowych.

Używa­nie jest bardzo proste. Wystar­czy stwo­rzyć obiekt phpUserAgent i można szaleć.

$ua = new phpUserAgent();
echo $ua->getBrowserName();     // firefox
echo $ua->getBrowserVersion();   // 3.6
echo $ua->getOperatingSystem(); // linux
echo $ua->getEngine();            // gecko

Gdy nie podamy para­me­trów, obiekt korzy­sta z bieżą­cej zmien­nej $_SERVER['HTTP_USER_AGENT']. Można samemu wymu­sić inny ciąg do rozpo­zna­nia poda­jąc w konstruktorze.

Dla typo­wych konfi­gu­ra­cji użyt­kow­nika skrypt działa całkiem nieźle. Rozpo­znaje również aliasy nazw prze­glą­da­rek i syste­mów opera­cyj­nych. Z testów jednost­ko­wych widzę, że próbuje również rozpo­zna­wać boty wyszukiwarek.

Patrząc na skrypt przy­szło­ściowo już widzę rozra­sta­jącą się listę nazw i alia­sów oraz autora powoli prze­sta­ją­cego pano­wać nad tym wszyst­kim. Na razie działa, ale co będzie później? Wg mnie archi­tek­tura cało­ści jest trochę niedo­pra­co­wana. Aż prosi się o użycie wzorca projek­to­wego Łańcuch zobo­wią­zań, którego ogni­wami będą poszcze­gólne prze­glą­darki i to w ich gestii będzie rozpo­znać siebie w poda­nym im ciągu. Żeby nie uderzyć tak bardzo w wydaj­ność skryptu, łańcuch powinny rozpo­czy­nać najczę­ściej używane prze­glą­darki aż do typu Unknown.

Podobne wpisy:

  1. Wygrze­bane z GitHuba (3) : Validation
  2. Wygrze­bane z GitHuba (1) : CSS Crush
  3. Wygrze­bane z GitHuba (6) : Monolog
  4. Wygrze­bane z GitHuba (2) : Imagine

One comment

  • 28 września 2011 - 18:11 | Permalink

    Proste, konkretne i na temat.

    Nic, tylko podziękować :)

  • Dodaj komentarz

    Twój adres e-mail nie zostanie opublikowany.

    Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <p> <pre lang="" line="" escaped=""> <q cite=""> <strike> <strong>