Navigace

Hlavní menu

 

Submenu

 

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í

idscreenres
0Jiné
1640x480
2800x600
31024x768
41280x1024
51600x1200

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

iddepth (bps)description (popis)
00Jiná
1116 barev
28256 barev
31616 bitů (High Color)
42424 bitů (True Color)
53232 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ů

Kebrt, Michal (10.6. 2002)
Diskuze: Statistika přístupů v PHP – rozlišení a barevná hl ...
2003-01-07 20:16:59slamiqbez databaze
2003-01-08 18:27:51Michal Kebrtbez databaze
2003-01-09 13:26:00slamiqdik
2003-01-20 14:40:19slamiqmmm2