Browscap.ini - co to je a jak na to
Nyní se trochu netradičně budeme věnovat PHP programování a nastavení PHP direktivy v oblasti detekce prohlížečů a jejich vlastností. Browscap.ini je jedna z možností jak zjistit o prohlížeči uživatele internetu maximum. Jedna z příjemných informací, které browscap.ini také nabízí, je informace o mobilitě zařízení. Můžete tedy s touto informací naložit právě pro rozlišení mobilní a plné verze vašeho projektu.
PHP a browscap.ini - jednoduše jak na to. Zajímá vás jak implementovat tuto techniku do svého webového serveru? Pokud jste administrátorem serveru, tak to není až tak složité.
Pokud provozujete webserver, který běží na řešení Apache a využíváte skriptovací jazyk PHP, pak je pro vás snadnou volbou instalace této direktivy a další využití informací z obrovské databáze prohlížečů a jejich "User-Agent" otisků.
Co je to ten browscap?
Jak název může naznačit, jedná se o Browser Capabilities - tedy něco jako možnosti prohlížeče. Jedná se o databázi, udržovanou ve formě ini souboru, který je volně ke stažení a také pravidelně aktualizovaný. Ve spojení s přímou integrací do webového serveru Apache a jazyka PHP je Browscap.ini docela užitečným pomocníkem. Pomocí informací, které z databáze Browscapu získáme jsme jako vývojáři schopní reagovat na rozličné prohlížeče internetu, které uživatelé použávají.
Tedy znalost této direktivy je pro nás přínosem nejenom v oblasti úpravy zdrojového kódu, ale také v oblasti rozlišení daného typu návštěvníka. Jsme schopni tedy dle vytvořené logiky interpretovat aplikaci jinými způsoby, případně návštěvníka přímo přesměrovat na jinou verzi aplikace, která je optimalizována přímo pro něj.
Browscap tedy dokáže rozlišit i mobilní zařízení?
Browscap.ini s oblibou používáme pro detekci mobilních zařízení. Tedy pokud vedle plné verze svého webového projektu provozujete i jeho mobilní platformu, můžete se touto cestou směle vydat. Jedná se o standard, který je přímo implementován v databázi Browscapu.
Mobilní web a browscap.ini si tedy velmi dobře rozumí. Navíc jde o serverovou detekci, tedy uživatel a jeho prohlížeč nemusí splňovat nic navíc - nemusí si nic instalovat ani v zařízení zapínat. Vývojář jej detekuje dle hlavního a základního parametru "User-Agent".
Jak browscap.ini nainstalovat?
Prvně je třeba browscap.ini vůbec stáhnout. Ini knihovnu můžeme najít na webu Browscapu v části ke stažení.
Dále je potřeba upravit nastavení PHP a restartovat apache webserver.
Nastavení cronu
Ideální je udržovat neustále aktuální soubor s databází. Udělejme tedy tuto špinavou práci pomocí cronu. Provedeme tento úkon jednou měsíčně. Mělo by to stačit.
1 1 1 * * wget -O /usr/lib/php5/php_browscap.ini http://browsers.garykeith.com/stream.asp?PHP_BrowsCapINI
Browscap - úprava PHP.INI
V PHP.INI najděte následující část - věnuje se browscapu a upravte kód následovně. Tím říkáme, kde máme browscap.ini umístěn. Pak už stačí jenom restartovat webserver.
[browscap] ; http://php.net/browscap browscap = /usr/lib/php5/php_browscap.ini
Použití browscap v praxi
Následující kód vypíše informace o webovém prohlížeči.
<?php echo $_SERVER['HTTP_USER_AGENT'] . "\n\n"; $browser = get_browser(null, true); print_r($browser); ?>
Výsledek volání PHP skriptu
Browscap.ini a jeho výsledek pro Google Chrome ve verzi 15.
Array
(
[browser_name_regex] => §^mozilla/5\.0 \(.*windows nt 6\.1.*wow64.*\) applewebkit/.* \(khtml, like gecko\).*chrome/15\..*safari/.*$§
[browser_name_pattern] => Mozilla/5.0 (*Windows NT 6.1*WOW64*) AppleWebKit/* (KHTML, like Gecko)*Chrome/15.*Safari/*
[parent] => Chrome 15.0
[platform] => Win7
[win32] =>
[win64] => 1
[browser] => Chrome
[version] => 15.0
[majorver] => 15
[frames] => 1
[iframes] => 1
[tables] => 1
[cookies] => 1
[javascript] => 1
[javaapplets] => 1
[cssversion] => 3
[minorver] => 0
[alpha] =>
[beta] =>
[win16] =>
[backgroundsounds] =>
[vbscript] =>
[activexcontrols] =>
[isbanned] =>
[ismobiledevice] =>
[issyndicationreader] =>
[crawler] =>
[aolversion] => 0
)
Výsledek volání PHP skriptu
Browscap.ini a jeho výsledek pro Android 2.3.5 na mém mobilním zařízení Samsgung Galaxy S II.
Array
(
[browser_name_regex] => §^mozilla/5\.0 \(linux; u; android 2\.3.*; .*; .*\) applewebkit/5.* \(khtml, like gecko\) .*version/4\.0 mobile safari/5.*$§
[browser_name_pattern] => Mozilla/5.0 (Linux; U; Android 2.3*; *; *) AppleWebKit/5* (KHTML, like Gecko) *Version/4.0 Mobile Safari/5*
[parent] => Android
[version] => 2.3
[majorver] => 2
[minorver] => 3
[browser] => Android
[platform] => Android
[frames] => 1
[iframes] => 1
[tables] => 1
[cookies] => 1
[javascript] => 1
[ismobiledevice] => 1
[cssversion] => 2
[alpha] =>
[beta] =>
[win16] =>
[win32] =>
[win64] =>
[backgroundsounds] =>
[vbscript] =>
[javaapplets] =>
[activexcontrols] =>
[isbanned] =>
[issyndicationreader] =>
[crawler] =>
[aolversion] => 0
)
Závěrem k Browscap.ini
Co nám říkají informace, které jsme právě získali?
- Jestli je prohlížeč mobilní a nebo není
- Dostaneme vzor (předpis) regulárního výrazu, který identifikuje tento prohlížeč
- Známe informace o typu, verzi a subverzi prohlížeče
- Dostaneme informace o css
- Dostaneme informace o cookies
- Dostaneme informace o iframes
- A mnoho dalšího..
Příklad detekce mobilního prohlížeče detect.php
Pokud dovolíme aplikaci přesměrovat návštěvníka automaticky na mobilní verzi webu, potom stačí do plné verze implementovat detekci. Ve zjednodušené podobě by pak mohla vypadat následovně. Návštěvník je zkontrolován - zda používá mobilní rozhraní. Pokud ano, pak je automaticky přesměrován na adresu mobilního zobrazení. To však jenom v případě, že tuto variantu v minulosti již nezrušil.
Pro tyto případy je možnost přepnout se zpět na plnou verzi takřka nezbytností, proto provádíme při detekci kontrolu na uživatelské nastavení. Rovněž by v obou verzích neměla chybět možnost pro přepnutí se z jedné verze do druhé.
Je možné také přímo vyměnit layout - tedy zdrojový kód a rozložení aplikace přímo bez přesměrování webu na jinou adresu. V mé osobní konvenci ovšem pořád existuje priorita přepnutí na mobilní verzi včetně přesměrování na mobilní adresu webu.
<?php
/* --- mobile or full version --- */
if( ((int) $_COOKIE['__mdnr'] != 1) && ((int) $_SESSION['__mdnr'] != 1) )
{
$browser = get_browser (null,true);
$ismobile = (bool) ( (int) $browser['ismobiledevice'] );
if( $ismobile )
{
$day = 24*60*60;
setCookie('__mdnr', '0', time()+(90*$day), '/' );
$_COOKIE['__mdnr'] = 0;
$_SESSION['__mdnr']= 0;
/* --- redirect to mobile version --- */
//Header('Location: http://m.example.com/ ');
echo 'Now redirecting you to mobile web';
exit;
}
}
?>
Tento ukázkový kód nemůže existovat jenom tak sám o sobě. Je k němu potřeba doplnit další aparát funkcí, které zabezpečí přímou integraci mobilní verze do projektu jako takového. Jde například o logiku nastavení pro přepnutí mezi plnou a mobilní verzí. Zde uživatel zkrátka musí mít možnost volby.
Pro demonstraci integrační logiky ovšem ukázka plně postačuje. V každém projektu se vyskytují odlišnosti, které je nutné korigovat a proto i tyto komponenty je nutné plnohodnotně přizpůsobit do ostrého provozu.
Meze pro kreativitu a další rozvoj v tomto ohledu tato direktiva pro PHP rozhodně neklade. Je nutné však také říct, že rozlišování uživatelů jenom na bázi browscap není úplně 100%. Jedná se o databázi, která je v pravidelných intervalech aktualizována, proto se mnohé informace o "User-Agent" mohou vyskytovat se zpožděním.
