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 | 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.
$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 | 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):
$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í:
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:
$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");
$move = MySQL_Data_Seek($query, 0);
while($result = MySQL_Fetch_Array($query)):
$width = Round($result["count_it"]/$max*200);
$rate = BCDiv($result["count_it"], ($pageviews/100), 2);
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":
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>';
$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");
$move = MySQL_Data_Seek($query, 0);
while($result = MySQL_Fetch_Array($query)):
$width = Round($result["count_it"]/$max*200);
$rate = BCDiv($result["count_it"], ($pageviews/100), 2);
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ů
Kebrt, Michal (10.6. 2002)