Statistika přístupů v PHP – rozlišení a barevná
hloubka
Statistiku přístupů dnes doplníme o další
informace čistě technického rázu. Samotné PHP je spuštěno na serveru,
a proto nemůže kromě informací, které klient pošle v požadavku
na stránku (hlavička User-Agent), zjistit žádné další
informace o klientovi, tedy ani rozlišení, ani barevnou hloubku.
Jediným způsobem, jak tyto údaje "dostat" do PHP skriptu, je použití
JavaScriptu.
Hotovou aplikaci si můžete jako vždy prohlédnout
a vyzkoušet. V ukázkové verzi se provádí statistika přístupů stránek
www.czechia.cz/help.
Pomocí JavaScriptu tedy vložíme počítadlo přístupů
(counter.php) do stránky jako malý obrázek. Obrázek přitom budeme
volat s několika parametry. První parametr referer obsahuje
URL stránky, ze které uživatel přišel na aktuální stránku. S tímto
parametrem budeme pracovat v příštím článku. V dalších parametrech
využijeme vlastnosti javascriptového objektu screen. Parametr
screenres obsahuje rozlišení ve formátu
ŠÍŘKA x VÝŠKA (např. 1024 x 768). Šířku
máme v JavaScriptu ve screen.width a výšku ve
screen.height. Poslední parametr colordepth
obsahuje barevnou hloubku v bps (bits per pixel), tento údaj je ve
screen.colorDepth.
<script
language="JavaScript"
type="text/javascript"> <!-- document.write("<img
src=\"__vas_server__/counter.php?referer=" +
escape(top.document.referrer) + "&screenres=" +
screen.width + "x" + screen.height + "&colordepth=" +
screen.colorDepth + "\" width=\"1\" height=\"1\"
alt=\"\">"); // --> </script>
| |
Bohužel, ne každý prohlížeč podporuje JavaScript. Abychom mohli
zaznamenat i přístupy z takovýchto prohlížečů, musíme obrázek vložit také
klasickým způsobem. Aby nedošlo k dvojímu volání počítadla u prohlížečů s
podporou JavaScriptu, umístíme obrázek do tagu
<noscript>, jehož obsah je prohlížeči s podporou
JavaScriptu ignorován:
<noscript> <img src="
vas_server__/counter.php" width="1" height="1" alt=""
border="0"> </noscript>
| |
Tabulka resolution
V tabulce resolution budeme mít jednotlivé typy rozlišení.
Vytvoříme ji pomocí jednoduchého SQL dotazu:
CREATE TABLE resolution
( id int(11) NOT
NULL, screenres
varchar(10), PRIMARY KEY
(id) );
- id - unikátní označení každého typu rozlišení
(primární klíč)
- screenres - rozlišení
| |
| id |
screenres |
| 0 |
Jiné |
| 1 |
640x480 |
| 2 |
800x600 |
| 3 |
1024x768 |
| 4 |
1280x1024 |
| 5 |
1600x1200 |
Nyní můžeme snadno zjistit id použitého rozlišení
porovnáním proměnné $screenres se záznamy v tabulce
resolution.
// ROZLIŠENÍ $query =
MySQL_Query("SELECT id FROM resolution WHERE screenres =
'$screenres'"); if ($result =
MySQL_Fetch_Array($query)) $resolution
=
$result["id"]; else $resolution
= 0; | |
Tabulka colordepth
V tabulce colordepth budou jednotlivé typy barevné
hloubky. SQL dotaz, který vytvoří tuto tabulku:
CREATE TABLE colordepth
( id int(11) NOT
NULL, depth
int(11), description
varchar(20), PRIMARY KEY
(id) );
- id - unikátní označení každého typu barevné
hloubky (primární klíč)
- depth - barevná hloubka v bps (bits per pixel)
- description - význam (popis) údaje z položky
depth
| |
| id |
depth (bps) |
description (popis) |
| 0 |
0 |
Jiná |
| 1 |
1 |
16 barev |
| 2 |
8 |
256 barev |
| 3 |
16 |
16 bitů (High Color) |
| 4 |
24 |
24 bitů (True Color) |
| 5 |
32 |
32 bitů (True Color) |
Porovnáním proměnné $colordepth se záznamy v tabulce
colordepth zjistíme id barevné hloubky používané
na klientském počítači (monitoru):
// BAREVNÁ HLOUBKA $query =
MySQL_Query("SELECT id FROM colordepth WHERE depth =
'$colordepth'"); if ($result =
MySQL_Fetch_Array($query)) $depth =
$result["id"]; else $depth = 0;
| |
Obsah obou proměnných $resolution i $depth se
v závěru celého skriptu counter.php uloží do tabulky
access, do položek resolution respektive
colordepth.
Vyhodnocení získaných údajů o rozlišení o barevné
hloubce
Výslednou statistiku za dané období zapíšeme do tabulky o třech
sloupcích - Typ rozlišení nebo barevné hloubky, Počet
přístupů s daným typem, Podíl v procentech + grafické
znázornění:
// ROZLIŠENÍ echo '<p
align="center"
class="heading">Rozlišení</p>'; echo '<table
width="430" cellspacing="0" align="center">'; echo
'<tr><td width="100"
class="tableheader">Typ</td><td width="50"
class="tableheader">Počet</td><td width="280"
class="tableheader">Podíl</td>';
| |
Následující část je velmi podobná vyhodnocení údajů o prohlížečích a
operačních systémech popsanému v minulém článku, proto
již nebudu vše podrobně komentovat. Potřebné údaje získáme spojením
tabulek resolution a access - položka
id v tabulce resolution je primární klíčem,
zatímco položka resolution v tabulce access je
klíčem cizím:
// vybíráme rozlišení podle jejich
zastoupení $query = MySQL_Query("SELECT screenres,
count(*) AS count_it FROM resolution, access WHERE
resolution.id = resolution AND $sql_access_date GROUP BY
resolution ORDER BY count_it DESC"); $max =
MySQL_Result($query, 0,
"count_it"); // počet přístupů s nejpoužívanějším
rozlišením $move = MySQL_Data_Seek($query,
0); //
přesuneme se znovu na začátek
while($result =
MySQL_Fetch_Array($query)): $width
=
Round($result["count_it"]/$max*200); // šířka obrázku znázorňujícího
podíl $rate =
BCDiv($result["count_it"], ($pageviews/100),
2); // podíl v
procentech echo
'<tr><td>' . $result["screenres"] .
'</td><td>' . $result["count_it"] .
'</td><td><img src="1.gif" width="' . $width .
'" height="8" border="0" alt=""> ' . $rate . '
%</td></tr>'; endwhile;
echo
'</table><br>';
| |
Analogicky vytvoříme i statistiku "Barevná hloubka":
// BARVY echo '<p align="center"
class="heading">Barevná hloubka</p>'; echo
'<table width="480" cellspacing="0"
align="center">'; echo '<tr><td width="150"
class="tableheader">Typ</td><td width="50"
class="tableheader">Počet</td><td width="280"
class="tableheader">Podíl</td>';
// vybíráme barevné hloubky podle jejich
zastoupení $query = MySQL_Query("SELECT description,
count(*) AS count_it FROM colordepth, access WHERE
colordepth.id = colordepth AND $sql_access_date GROUP BY
colordepth ORDER BY count_it DESC"); $max =
MySQL_Result($query, 0,
"count_it"); // počet přístupů s nejpoužívanější barevnou
hloubkou $move = MySQL_Data_Seek($query,
0); //
přesuneme se znovu na začátek
while($result =
MySQL_Fetch_Array($query)): $width
=
Round($result["count_it"]/$max*200); // šířka obrázku znázorňujícího
podíl $rate =
BCDiv($result["count_it"], ($pageviews/100),
2); // podíl v
procentech echo
'<tr><td>' . $result["description"] .
'</td><td>' . $result["count_it"] .
'</td><td><img src="1.gif" width="' . $width .
'" height="8" border="0" alt=""> ' . $rate . '
%</td></tr>'; endwhile;
echo
'</table><br>';
| |
Tímto článkem končí zjišťování a vyhodnocování technických údajů
(prohlížeč, operační systém, rozlišení, barevná hloubka). Příště si
řekneme něco o tom, jak zjistit ze kterých stránek návštěvníci
přicházejí.
Předchozí díly:
Statistika přístupů v PHP
– detekce operačního systému
Statistika přístupů v PHP
– detekce prohlížeče
Statistika přístupů v PHP
– počet unikátních návštěvníků