Statistika přístupů v PHP – rozlišení a barevná hloubka
Statistiku přístupů v tomto článku doplníme o další informace čistě technického rázu. Upozorňuji, že zjištění rozlišení a barevné hloubky vyžaduje použití JavaScriptu, bez něj je získání těchto informací prakticky nemožné.
Hotovou aplikaci si jako obvykle můžete prohlédnout a vyzkoušet. V této ukázkové verzi se provádí statistika přístupů stránek http://www.czechia.cz/help/.
Na úvod trocha teorie. 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 o klientovi žádné další informace, tedy ani rozlišení, ani barevnou hloubku. Jediným způsobem, jak tyto údaje „dostat“ do PHP skriptu, je použití JavaScriptu.
Pomocí JavaScriptu tedy vložíme počítadlo přístupů (counter.php) do stránky jako malý obrázek 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 příště. V dalších parametrech využijeme vlastnosti javascriptového objektu screen
. Parametr screenres
obsahuje rozlišení ve formátu ŠÍŘKAxVÝŠKA (například 1024×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 pro nás, ne každý prohlížeč podporuje JavaScript. Abychom mohli zaznamenat i přístupy z takovýchto prohlížečů, musíme obrázek vložit 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 elementu <noscript>
, jehož obsah je prohlížeči s podporou JavaScriptu povinně 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í SQL dotazu, uvedeného níže. Autorem aktuálního seznamu, který obsahuje i velmi exotická rozlišení, je Pavel Kodýtek.
CREATE TABLE resolution (
id int(11) NOT NULL,
screenres varchar(10) NOT NULL,
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 | 640×480 |
2 | 790×566 |
3 | 800×600 |
4 | 832×624 |
5 | 960×720 |
6 | 1000×700 |
7 | 1024×600 |
8 | 1024×640 |
9 | 1024×742 |
10 | 1024×768 |
11 | 1152×768 |
12 | 1152×864 |
13 | 1152×870 |
14 | 1152×900 |
15 | 1280×768 |
16 | 1280×800 |
17 | 1280×854 |
18 | 1280×960 |
19 | 1280×977 |
20 | 1280×1024 |
21 | 1360×1020 |
22 | 1400×1050 |
23 | 1440×900 |
24 | 1600×600 |
25 | 1600×998 |
26 | 1600×1024 |
27 | 1600×1200 |
28 | 1600×1280 |
29 | 1920×1200 |
30 | 2048×1768 |
31 | 2048×768 |
32 | 2304×864 |
33 | 2560×960 |
34 | 2560×1024 |
35 | 3840×1024 |
Nyní můžeme snadno zjistit id použitého rozlišení porovnáním proměnné $screenres
se záznamy v tabulce resolution.
// ROZLISENI
$resolution = 0;
if (isset($_GET[‚screenres‘])) {
$screenres = addslashes($_GET[‚screenres‘]);
$query = mysql_query(„SELECT id FROM resolution WHERE screenres = ‚$screenres'“);
if ($result = mysql_fetch_array($query))
$resolution = $result[‚id‘];
}
Tabulka colordepth
V tabulce colordepth budou jednotlivé typy barevné hloubky. SQL dotaz, který vytvoří tuto tabulku, vypadá následovně:
CREATE TABLE colordepth (
id int(11) NOT NULL,
depth int(11) NOT NULL,
description varchar(20) NOT NULL,
PRIMARY KEY (id)
)
id | depth | description |
---|---|---|
0 | 0 | Jiná, nezjištěno |
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) |
- id – unikátní označení každého typu barevné hloubky (primární klíč)
- depth – barevná hloubka v bps (bits per pixel)
- description – popis údaje z položky depth
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).
// BAREVNA HLOUBKA
$depth = 0;
if(isset($_GET[‚colordepth‘])) {
$colordepth = addslashes($_GET[‚colordepth‘]);
$query = mysql_query(„SELECT id FROM colordepth WHERE depth = ‚$colordepth'“);
if ($result = mysql_fetch_array($query))
$depth = $result[‚id‘];
}
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í.
// ROZLISENI
echo ‚<h2>Rozlišení</h2>‘;
echo ‚<table width=“430″ cellspacing=“0″>‘;
echo ‚<tr><th>Typ</th><th>Počet</th><th>Podíl</th></tr>‘;
Následující část je velmi podobná vyhodnocení údajů o prohlížečích a operačních systémech popsanému v předchozí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.
// vybirame rozliseni podle jejich zastoupeni
$query = mysql_query(„SELECT screenres, count(resolution) AS count_it FROM access JOIN resolution ON (resolution = resolution.id) WHERE $sql_access_date GROUP BY resolution ORDER BY count_it DESC“);
$max = mysql_result($query, 0, ‚count_it‘); // pocet pristupu s nejpouzivanejsim rozlisenim
$move = mysql_data_seek($query, 0); // presuneme se znovu na zacatek
while($result = mysql_fetch_array($query)) {
$width = round($result[‚count_it‘]/$max*200); // sirka obrazku znazornujiciho podil
$rate = sprintf(‚%.2f‘, $result[‚count_it‘]/($pageviews/100)); // podil v procentech
echo ‚<tr><td>‘ . $result[‚screenres‘] . ‚</td><td>‘ . $result[‚count_it‘] . ‚</td><td><img src=“1.gif“ width=“‚ . $width . ‚“ height=“8″ alt=““ /> ‚ . $rate . ‚ %</td></tr>‘;
}
echo „</table>\n\n“;
Analogicky vytvoříme i statistiku „Barevná hloubka“.
// BARVY
echo ‚<h2>Barevná hloubka</h2>‘;
echo ‚<table width=“480″ cellspacing=“0″>‘;
echo ‚<tr><th>Typ</th><th>Počet</th><th>Podíl</th></tr>‘;
// vybirame barevne hloubky podle jejich zastoupeni
$query = mysql_query(„SELECT description, count(colordepth) AS count_it FROM access JOIN colordepth ON (resolution = colordepth.id) WHERE $sql_access_date GROUP BY colordepth ORDER BY count_it DESC“);
$max = mysql_result($query, 0, ‚count_it‘); // pocet pristupu s nejpouzivanejsi barevnou hloubkou
$move = mysql_data_seek($query, 0); // presuneme se znovu na zacatek
while($result = mysql_fetch_array($query)) {
$width = round($result[‚count_it‘]/$max*200); // sirka obrazku znazornujiciho podil
$rate = sprintf(‚%.2f‘, $result[‚count_it‘]/($pageviews/100)); // podil v procentech
echo ‚<tr><td>‘ . $result[‚description‘] . ‚</td><td>‘ . $result[‚count_it‘] . ‚</td><td><img src=“1.gif“ width=“‚ . $width . ‚“ height=“8″ alt=““ /> ‚ . $rate . ‚ %</td></tr>‘;
}
echo „</table>\n\n“;
Tímto článkem končí zjišťování a vyhodnocování technických údajů (prohlížeč, operační systém, rozlišení, barevná hloubka).
Pozn. red.: Tento článek vyšel poprvé 10. 6. 2002. Původní verze článku a k němu vedené diskuse jsou vám k dispozici v ZIP archivech.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
Regulace digitálních služeb: Co přináší nové nařízení DSA?
20. února 2024 -
Doména .io v ohrožení: Co přinese předání Čagoských ostrovů?
10. října 2024 -
Lék na phishing a apatii ve světě e-mailového marketingu
18. března 2024
Nejnovější
-
Jak rozšířit úložiště Macu za pětinovou cenu?
16. prosince 2024 -
Nové trendy v doménách pro osobní projekty – DIY, LIVING a LIFESTYLE
9. prosince 2024 -
Jak chránit webové stránky před Web/AI Scrapingem
27. listopadu 2024 -
Jaký monitor je nejlepší k novému Macu Mini?
25. listopadu 2024