Statistika přístupů v PHP – detekce operačního systému
Dnes navážeme na předchozí článek o detekci prohlížečů a povíme si, jak zjistit další údaj o návštěvníkovi - použitý operační systém. Na závěr provedeme vyhodnocení údajů o prohlížečích a operačních systémech, včetně jednoduchého grafického znázornění.
Postup, kterým budeme zjišťovat informaci o operačním systému, je velmi podobný postupu, kterým jsme zjišťovali údaje o prohlížeči. Z minulého dílu víme, že proměnná $HTTP_USER_AGENT obsahuje kromě informací o prohlížeči i informaci o platformě, na které prohlížeč běží. Z důvodů popsaných v minulém článku nevyužijeme funkci Get_Browser(), ale "ruční dolování" potřebné informace, k čemuž opět použijeme regulární výrazy v kombinaci s databází.
Detekce operačního systému je o něco komplikovanější než detekce prohlížečů. Většina operačních systémů (OS) se totiž hlásí několika různými způsoby, jak je uvedeno v následující tabulce:
Prohlížeč | Příklad hlavičky |
Windows ME | Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90) |
Windows ME | Opera/6.0 (Windows ME; U) [cs] |
Windows 98 | Mozilla/4.75 [en] (Win98; U) |
Windows 98 | Mozilla/4.0 (compatible; MSIE 4.01; Windows 98) |
Windows 98 | Mozilla/4.0 (compatible; Opera/3.0; Windows 4.10) 3.50 |
Windows 95 | Mozilla/4.0 (compatible; MSIE 5.5; Windows 95) |
Windows 95 | Mozilla/4.05 [en] (Win95; I) |
Windows 2000 | Mozilla/4.0 (compatible; MSIE 5.0; Windows 2000) Opera 6.0 [cs] |
Windows 2000 | Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) |
Windows XP | Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) |
Windows XP | Mozilla/4.0 (compatible; MSIE 5.0; Windows XP) Opera 6.0 [cs] |
Windows NT | Mozilla/4.0 (compatible; MSIE 5.01; Windows NT) |
Windows NT | Mozilla/4.5 [en] (WinNT; I) |
Windows NT | Mozilla/5.0 (Windows; U; WinNT4.0; en-US; rv:0.9.2) Gecko/20010726 Netscape6/6.1 |
Macintosh | Mozilla/4.0 (compatible; MSIE 5.0; Mac_PowerPC) |
Macintosh | Mozilla/4.5 (compatible; iCab Pre2.2; Macintosh; I; PPC) |
Windows 3.x | Mozilla/2.0 (Win16; I) |
Windows 3.x | Mozilla/2.0 (compatible; MSIE 3.02; Windows 3.1) |
Linux | Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.6+) Gecko/20011122 |
SunOS | Mozilla/4.7 [en] (X11; I; SunOS 5.5.1 sun4m) |
Z tabulky opět vyplývá nutnost dodržet při detekci určité pořadí. Například detekce Windows ME musí být provedena dříve, než detekce Windows 98, protože hlavička s Windows ME často obsahuje i text "Windows 98". Obdobně Windows 2000 a XP musí být dříve než Windows NT a podobně.
Tabulka OS
Veškeré údaje o operačních systémech uložíme do tabulky os, kterou vytvoříme pomocí tohoto SQL dotazu:
|
- id - unikátní označení každého operačního systému (primární klíč)
- name - název operačního systému
- os_regexp - regulární výraz zjišťující daný OS
Při vkládání záznamů do tabulky musíme dodržet pořadí ze vzorové tabulky. Z důvodů objasněných v minulém článku píšeme v položce os_regexp místo mezer metaznak ".". Skutečnost, že se každý operační systém může představit několika způsoby, snadno vyřešíme použitím metaznaku "|". Text poté vyhovuje regulárnímu výrazu, pokud vyhovuje alespoň jedné jeho části.
id | name (operační systém) | os_regexp (regulární výraz) |
0 | Jiný, nezjištěno | |
1 | Windows ME | win.9x.4\.90|windows.me |
2 | Windows 98 | windows.98|win98|windows.4\.10 |
3 | Windows 95 | windows.95|win95 |
4 | Windows 2000 | windows.nt.5\.0|windows.2000 |
5 | Windows XP | windows.xp|windows.nt.5\.1 |
6 | Windows NT | windows.nt|winnt |
7 | Macintosh | mac |
8 | Linux | linux |
9 | Windows 3.x | win16|win3\.|windows.3\. |
10 | Unix | unix |
11 | BeOS | beos |
12 | SunOS | sunos |
13 | HP-UX | hp-ux |
14 | OSF | osf |
15 | IRIX | irix |
16 | FreeBSD | freebsd |
17 | OpenBSD | openbsd |
18 | OS/2 | os/2 |
19 | Ostatní Windows | win |
Detekci operačního systému provedeme podobně jako detekci prohlížeče použitím regulárního výrazu přímo v SQL dotazu. Do proměnné $os se uloží id operačního systému. Obsah této proměnné se v závěru celého skriptu uloží do tabulky access, konkrétně do položky os:
|
Vyhodnocení údajů o prohlížečích a operačních systémech
Výslednou statistiku zapíšeme do tabulky o 3 sloupcích - Název prohlížeče nebo OS, Počet přístupů s daným softwarem, Podíl v procentech + grafické znázornění:
|
Nyní musíme z tabulky access získat statistiku prohlížečů za dané období (= $sql_access_date), k čemuž potřebujeme pouze dva údaje - název prohlížeče a počet přístupů s tímto prohlížečem. Vše provedeme spojením tabulek browser a access, kde položka id v tabulce browser je primárním klíčem a položka browser v tabulce access cizím klíčem (obsahuje primární klíče z tabulky browser). Záznamy sdružíme do skupin určených položkou browser (= unikátní označení prohlížeče) a seřadíme sestupně (DESC) podle zastoupení jednotlivých prohlížečů. Obdobný postup budeme používat i v dalších článcích, takže pokud vám není spojování tabulek a použití agregačních funkcí (například count) úplně jasné, nastudujte si články Dotazy v jazyce SQL (II.) a Dotazy v SQL s agregací.
Jelikož budeme podíl jednotlivých prohlížečů znázorňovat i graficky, musíme vědět, kolik přístupů bylo zaznamenáno s nejpoužívanějším prohlížečem. To zjistíme použitím funkce MySQL_Result(), kde první parametr označuje výsledek, druhý číslo záznamu a třetí název položky, přičemž záznamy jsou číslovány od nuly. Protože se záznamy z databáze budeme ještě pracovat, musíme pomocí funkce MySQL_Data_Seek() přesunout ukazatel výsledku na první záznam:
|
Konečně můžeme začít se zápisem dat do tabulky. U každého prohlížeče musíme vypočítat šířku obrázku znázorňujícího podíl daného prohlížeče. To provedeme použitím matematické trojčlenky, kde obrázek u prohlížeče s největším podílem bude mít šířku 200 px. Percentuelní podíl přístupů s daným prohlížečem na celkovém počtu přístupů za dané období (= $viewpages) spočítáme pomocí funkce BCDiv() - první parametr označuje dělenec, druhý dělitele a třetí počet desetinných míst. Získané údaje poté zapíšeme do tabulky:
|
Stejně jako statistiku prohlížečů vytvoříme i statistiku operačních systémů:
|
Tolik o prohlížečích a operačních systémech. Příště se podíváme na to, jak zjistit rozlišení a barevnou hloubku obrazovky.
Předchozí díly:
Statistika přístupů v PHP – detekce prohlížečeStatistika přístupů v PHP – počet unikátních návštěvníků