|
![]() |
|
||||
|
|
|
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ěvnostHodinová 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. // HODINOVÁ NÁVŠTĚVNOST 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ěvnostDenní 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.). // DENNÍ NÁVŠTĚVNOST 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ánekK 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 tinytext, title tinytext, PRIMARY KEY (id) );
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. // STRÁNKA $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. // STRÁNKY 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ů Michal Kebrt (21.8.
2002) |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| © Zoner software, s.r.o., všechna práva vyhrazena, tento server dodržuje právní předpisy o ochraně osobních údajů. |