Statistika přístupů v PHP – hodinová a denní návštěvnost
V tomto článku naši aplikaci rozšíříme o statistiku přístupů v jednotlivých hodinách (0 až 23) a dnech (pondělí až neděle). Kromě toho si ukážeme, jak vytvořit statistiku přístupů jednotlivých stránek serveru.
Hotovou aplikaci si můžete prohlédnout a vyzkoušet. V ukázkové verzi se provádí statistika přístupů stránek http://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říklad v rozmezí 00:00:00 až 00:59:59 či 14:00:00 až 14:59:59. Dobrou zprávou je, že 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. Protože podíl přístupů v každé hodině na celkovém počtu přístupů budeme vyjadřovat i graficky, musíme znát počet přístupů v nejvíce zastoupené hodině, a proto 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ň s percentuelním podílem si 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.
// HODINOVA NAVSTEVNOST
$max = 0; // maximalni hodinova hodnota
for($i = 0;$i <= 23;$i++) {
$query = mysql_query(„SELECT count(id) FROM access WHERE HOUR(access_date) = ‚$i‘ AND $sql_access_date“);
$result = mysql_fetch_array($query);
$hourly_pageviews[$i] = $result[‚count(id)‘];
$rate_pageviews[$i] = sprintf(‚%.2f‘, $result[‚count(id)‘]/($pageviews/100));
if ($result[‚count(id)‘] > $max)
$max = $result[‚count(id)‘];
}
echo ‚<h2>Návštěvnost v hodinách</h2>‘;
echo ‚<table width=“430″ cellspacing=“0″>‘;
echo ‚<tr><th>Hodina</th><th>Počet</th><th>Podíl</th></tr>‘;
for($i = 0;$i <= 23;$i++) {
$width = round($hourly_pageviews[$i]/$max*250); // sirka obrazku znazornujiciho podil
echo ‚<tr><td>‘ . $i . ‚</td><td>‘ . $hourly_pageviews[$i] . ‚</td><td><img src=“1.gif“ width=“‚ . $width . ‚“ height=“8″ alt=““ /> ‚ . $rate_pageviews[$i] . ‚ %</td></tr>‘;
}
echo „</table>\n\n“;
Denní návštěvnost
Denní návštěvnost vyjadřuje počet přístupů v jednotlivých dnech, například v pondělky, úterky a podobně. 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ý…).
// DENNI NAVSTEVNOST
$max = 0;// maximalni denni hodnota
for($i = 0;$i <= 6;$i++) {
$query = mysql_query(„SELECT count(id) FROM access WHERE WEEKDAY(access_date) = ‚$i‘ AND $sql_access_date“);
$result = mysql_fetch_array($query);
$daily[$i] = $result[‚count(id)‘];
$rate_daily[$i] = sprintf(‚%.2f‘, $result[‚count(id)‘]/($pageviews/100));
if ($result[‚count(id)‘] > $max)
$max = $result[‚count(id)‘];
}
echo ‚<h2>Návštěvnost ve dnech</h2>‘;
echo ‚<table width=“430″ cellspacing=“0″>‘;
echo ‚<tr><th>Den</th><th>Počet</th><th>Podíl</th></tr>‘;
$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″ alt=““ /> ‚ . $rate_daily[$i] . ‚ %</td></tr>‘;
}
echo „</table>\n\n“;
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.
CREATE TABLE path (
id int(11) NOT NULL auto_increment,
page varchar(250) NOT NULL,
title tinytext NOT NULL,
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é $_SERVER['REQUEST_URI']
, ale v proměnné $_SERVER['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ň s ostatními údaji o daném přístupu ho uložíme do tabulky access.
// STRANKA
$request_uri = strtolower($_SERVER[‚HTTP_REFERER‘]); // prevede na mala pismena
// je stranka v databazi ? (pokud ne, pridame ji)
$query = mysql_query(„SELECT id FROM path WHERE page = ‚$request_uri'“);
if ($result = mysql_fetch_array($query)) {
$path = $result[‚id‘];
} else {
// nazev stranky
$fp = fopen($request_uri, ‚r‘);
eregi(„<title>(.*)</title>“, fread($fp, 1000), $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();
}
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, tedy výpočet podílu a šířky obrázku, byl komentován v článku o detekci operačního systému.
// STRANKY
// vybirame stránky podle jejich zastoupeni
$query = mysql_query(„SELECT page, title, count(path) AS count_it FROM access JOIN path ON (path.id = path) WHERE $sql_access_date GROUP BY path.id ORDER BY count_it DESC“);
if(mysql_num_rows($query) != 0) {
echo ‚<h2>Stránky</h2>‘;
echo ‚<table width=“680″ cellspacing=“0″>‘;
echo ‚<tr><th>Název</th><th>Počet</th><th class=“width2″>Podíl</th></tr>‘;
$max = mysql_result($query, 0, ‚count_it‘); // pocet shlednuti nejnavstevovanejsi stranky
$move = mysql_data_seek($query, 0); // presuneme se znovu na zacatek
while($result = mysql_fetch_array($query)) {
$name = ($result[‚title‘]!=’0′) ? $result[‚title‘] : $result[‚page‘];// nazev stranky nebo URL
$width = round($result[‚count_it‘]/$max*300); // sirka obrazku znazornujiciho podil
$rate = sprintf(‚%.2f‘, $result[‚count_it‘]/($pageviews/100)); // podil v procentech
echo ‚<tr><td>‘ . $name . ‚</td><td>‘ . $result[‚count_it‘] . ‚</td><td><img src=“1.gif“ width=“‚ . $width . ‚“ height=“8″ alt=““ /> ‚ . $rate . ‚ %</td></tr>‘;
}
echo „</table>\n\n“;
}
Pozn. red.: Tento článek vyšel poprvé 21. 8. 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
-
Gaming na HDR monitoru: Stojí to za to?
12. srpna 2024 -
Webdesign: Jak optimalizovat tlačítka na webu
7. března 2024 -
AI a internetové podvody
29. října 2024 -
Užitečné nástroje pro bezpečnost na internetu
17. října 2024
Nejnovější
-
Výkonný a kompaktní: ASOME Max Studio s výjimečným poměrem cena/výkon
11. listopadu 2024 -
Šokující data od Microsoftu: Kyberútoky rostou o stovky procent!
8. listopadu 2024 -
Chcete jedinečnou doménu? Objevte koncovky FOOD, MEME a MUSIC!
7. listopadu 2024 -
OpenAI představilo novou funkci ChatGPT Search
6. listopadu 2024
Pavel Ř.
Úno 23, 2021 v 10:26Chybí tu definice tabulky access, jinak to vypadá docela použitelně. A ještě bych dal mysqli místo mysql.