Statistika přístupů v PHP – hodinová a denní návštěvnost
Pokud se již nedočkavě ohlížíte po konci cesty k vlastním statistikám, dočkáte se již v příštím díle. V tom předposledním připravíme statistiku přístupů v jednotlivých hodinách (0 až 23) a dnech (Pondělí až Neděle). Kromě toho si řekneme, jak vytvořit statistiku přístupů jednotlivých stránek našeho serveru.
Hotovou aplikaci si můžete prohlédnout a vyzkoušet. V ukázkové verzi se provádí statistika přístupů stránek www.czechia.cz/help.
Hodinová návštěvnost
Hodinová návštěvnost vyjadřuje počet přístupů v jednotlivých hodinách, tedy např. mezi 00:00:00 a 00:59:59 či 14:00:00 a 14:59:59. K vytvoření této statistiky nepotřebujeme žádnou zvláštní SQL tabulku, vystačíme si pouze s tabulkou access a položkou access_date, která obsahuje datum a čas přístupu. Podíl přístupů na celkovém počtu přístupů budeme za každou hodinu vyjadřovat i graficky, proto musíme znát počet přístupů v nejvíce zastoupené hodině. K tomu je třeba použít dva podobné cykly. V prvním cyklu postupně zjišťujeme počet přístupů v jednotlivých hodinách (0 až 23) a zároveň si s percentuelním podílem obě hodnoty ukládáme do dvou polí. Za zmínku stojí snad jen použití SQL příkazu HOUR, který z daného času vrátí hodinu. V druhém cyklu počítáme šířky obrázků znázorňujících podíl jednotlivých hodin a statistiku zapisujeme do tabulky.
for($i=0;$i<=23;$i++):
$query = MySQL_Query("SELECT count(*) FROM access WHERE HOUR(access_date) = '$i' AND $sql_access_date");
$result = MySQL_Fetch_Array($query);
$hourly_pageviews[$i] = $result["count(*)"]; // počet přístupů v jednotlivých hodinách
$rate_pageviews[$i] = BCDiv($result["count(*)"], ($pageviews/100), 2); // podíl v procentech
endfor;
echo '<p align="center" class="heading">Návštěvnost v hodinách</p>';
echo '<table width="430" cellspacing="0" align="center">';
echo '<tr><td width="50" class="tableheader">Hodina</td><td width="50" class="tableheader">Počet</td><td width="330" class="tableheader">Podíl</td>';
$max = Max($hourly_pageviews); // počet přístupů v nejvíce zastoupené hodině
for($i=0;$i<=23;$i++):
$width = Round($hourly_pageviews[$i]/$max*250); // šířka obrázku znázorňujícího podíl
echo '<tr><td>' . $i . '</td><td>' . $hourly_pageviews[$i] . '</td><td><img src="1.gif" width="' . $width . '" height="8" border="0" alt=""> ' . $rate_pageviews[$i] . ' %</td></tr>';
endfor;
echo '</table><br>';
Denní návštěvnost
Denní návštěvnost vyjadřuje počet přístupů v jednotlivých dnech, např. v pondělky, úterky, atd. Tuto statistiku vytvoříme obdobně jako statistiku hodinové návštěvnosti. SQL příkaz WEEKDAY vrací číslo dne v týdnu (0 = Pondělí, 1 = Úterý atd.).
for($i=0;$i<=6;$i++):
$query = MySQL_Query("SELECT count(*) FROM access WHERE WEEKDAY(access_date) = '$i' AND $sql_access_date");
$result = MySQL_Fetch_Array($query);
$daily[$i] = $result["count(*)"];
$rate_daily[$i] = BCDiv($result["count(*)"], ($pageviews/100), 2);
endfor;
echo '<p align="center" class="heading">Návštěvnost ve dnech</p>';
echo '<table width="430" cellspacing="0" align="center">';
echo '<tr><td width="50" class="tableheader">Den</td><td width="50" class="tableheader">Počet</td><td width="330" class="tableheader">Podíl</td>';
$max = Max($daily);
$days = Array("Pondělí", "Úterý", "Středa", "Čtvrtek", "Pátek", "Sobota", "Neděle");
for($i=0;$i<=6;$i++):
$width = Round($daily[$i]/$max*250);
echo '<tr><td>' . $days[$i] . '</td><td>' . $daily[$i] . '</td><td><img src="1.gif" width="' . $width . '" height="8" border="0" alt=""> ' . $rate_daily[$i] . ' %</td></tr>';
endfor;
echo '</table><br>';
Statistika stránek
K vytvoření statistiky jednotlivých stránek našeho serveru budeme potřebovat tabulku path, kam budeme ukládat informace o stránkách.
id int(11) NOT NULL auto_increment,
page tinytext,
title tinytext,
PRIMARY KEY (id)
);
- id - unikátní označení každé stránky (primární klíč)
- page - URL stránky
- title - název stránky (z tagu <title>)
Ve skriptu, který je součástí souboru counter.php, musíme nejprve zjistit, jakou stránku si uživatel prohlíží. Protože počítadlo voláme jako obrázek, nemáme URL stránky v proměnné $REQUEST_URI, ale v proměnné $HTTP_REFERER. Poté, co URL převedeme na malá písmena, zjistíme, zda je stránka již v databázi. Pokud ne, do databáze ji přidáme. Ještě předtím se pokusíme zjistit název stránky, což je text mezi tagy <title> a </title>. Do proměnné $path vložíme id stránky a zároveň ho uložíme s ostatními údaji o daném přístupu do tabulky access.
$request_uri = StrToLower($HTTP_REFERER); // převede na malá písmena
// je stránka v databázi ? (pokud ne, přidáme ji)
$query = MySQL_Query("SELECT id FROM path WHERE page = '$request_uri'");
if ($result = MySQL_Fetch_Array($query)):
$path = $result["id"];
else:
// název stránky
$fp = FOpen($request_uri, "r");
ERegI("<title>(.*)</title>", FRead($fp, 300), $title);
FClose($fp);
if($title[1]!="")
$title = $title[1];
else
$title = 0;
$query = MySQL_Query("INSERT INTO path VALUES ('', '$request_uri', '$title')");
$path = MySQL_Insert_ID();
endif;
// do tabulky access vložíme informace o každém přístupu na stránku
$add = MySQL_Query("INSERT INTO access VALUES ('', '$date', '$visit', '$browser', '$os', '$resolution', '$depth', '$referer', '$path', '$area', '$ip', '$ip_name', '$domain')");
Závěrečné vyhodnocení zapíšeme do tabulky o třech sloupcích - Název stránky nebo URL, Počet shlédnutí této stránky, Podíl přístupů na tuto stránku na celkovém počtu přístupů. V SQL dotazu spojíme tabulky path a access, položka id v tabulce path je primární klíč, zatímco položka path v tabulce access je klíč cizí. Další postup, tj. výpočet podílu a šířky obrázku, byl komentován ve třetím dílu.
echo '<p align="center" class="heading">Stránky</p>';
echo '<table width="680" cellspacing="0" align="center">';
echo '<tr><td width="250" class="tableheader">Název</td><td width="50" class="tableheader">Počet</td><td width="380" class="tableheader">Podíl</td>';
// vybíráme stránky podle jejich zastoupení
$query = MySQL_Query("SELECT page, title, count(*) AS count_it FROM path, access WHERE path.id = path AND $sql_access_date GROUP BY path.id ORDER BY count_it DESC");
$max = MySQL_Result($query, 0, "count_it"); // počet shlédnutí nejnavštěvovanější stránky
$move = MySQL_Data_Seek($query, 0); // přesuneme se znovu na začátek
while($result = MySQL_Fetch_Array($query)):
$name = ($result["title"]!='0') ? $result["title"] : $result["page"]; // název stránky nebo URL
$width = Round($result["count_it"]/$max*300); // šíř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>' . $name . '</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 je statistika přístupů ukončena, zbývá nám již jen vytvoření kalendáře a právě o tom bude následující díl.
Předchozí díly:
Statistika přístupů v PHP – regionální lokalizaceStatistika přístupů v PHP – domény nejvyšší úrovně
Statistika přístupů v PHP – vyhledávací fráze
Statistika přístupů v PHP – odkud přicházejí návštěvníci
Statistika přístupů v PHP – rozlišení a barevná hloubka
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ů