Navigace

Hlavnφ menu

 

Statistika p°φstup∙ v PHP - kolßΦovΘ grafy

V tomto Φlßnku budeme pokraΦovat v prßci s grafy. Vytvo°φme dva kolßΦovΘ grafy, zachycujφcφ statistiku jednotliv²ch typ∙ rozliÜenφ a barevnΘ hloubky. Krom∞ toho se dozvφte, jak vytvo°it ikonu znßzor≥ujφcφ poΦet shlΘdnut²ch stran.

VÜechny podstatnΘ v∞ci, t²kajφcφ se vytvß°enφ graf∙ pomocφ knihovny JpGraph, byly popsßny v p°edchßzejφcφm Φlßnku. Jeliko₧ zdrojovΘ k≤dy jsou dostateΦn∞ okomentovanΘ, nebudu se ji₧ vφce rozepisovat. (K dispozici je vßm i ukßzka aplikace, m∞°φcφ statistiky p°φstup∙ strßnek http://www.czechia.cz/help/, ovÜem bez zde popisovan²ch graf∙.)

RozliÜenφ (resolution.php)

Graf rozliÜenφ u₧ivatelsk²ch za°φzenφ m∙₧e vypadat nap°φklad takto:

RozliÜenφ

Zdrojov² k≤d pro vytvo°enφ grafu:

require './config.php';  // konfigurace
require './db.php';  // pripojeni k databazi

// nacteni souboru nutnych pro vytvorenφ grafu
require JPGRAPH_PATH . '/src/jpgraph.php';
include JPGRAPH_PATH . '/src/jpgraph_pie.php';

if (isset($_GET['from_date']) and isset($_GET['to_date'])) {
  $from_date = addslashes(urldecode($_GET['from_date']));
  $to_date = addslashes(urldecode($_GET['to_date']));
  
  // omezenφ statistiky na urcite obdobi
  $sql_access_date = "access_date >= '$from_date' AND access_date <= '$to_date 23:59:59'";
  
  // vybirame rozliseni podle jejich zastoupeni
  $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");
  
  while ($result = mysql_fetch_array($query)) {
    $data[] = $result['count_it'];  // pocet pristupu s jednotlivymi typy rozliseni
    $legend[] = $result['screenres'] . ' (' . $result['count_it'] . ')';  // legenda (+ hodnoty)
  }
  
  // kolacovy graf (velikost)
  $graph = new PieGraph(400,250);
  $graph->SetShadow();  // stin grafu
  $graph->SetColor('linen');  // barva pozadi grafu
  
  // titulek (font)
  $graph->title->Set('RozliÜenφ');
  $graph->title->SetFont(FF_FONT2,FS_BOLD);
  
  // kolacovy graf
  $p1 = new PiePlot($data);
  $p1->SetLegends($legend);  // legenda
  $p1->SetCenter(0.25, 0.50);  // pozice kolace
  $p1->value->SetFormat('%.2f%%');  // format popisku u casti kolace
  $p1->SetSize(0.37);  // velikost kolace
  
  // pridej graf
  $graph->Add($p1);
  
  // zobraz graf
  $graph->Stroke();
}

Barevnß hloubka (depth.php)

Graf barevnΘ hloubky u₧ivatelsk²ch za°φzenφ m∙₧e vypadat nap°φklad takto:

Barevnß hloubka

Odpovφdajφcφ zdrojov² k≤d:

require './config.php';  // konfigurace
require './db.php';  // pripojeni k databazIso()

// nacteni souboru nutnych pro vytvorenφ grafu
require JPGRAPH_PATH . '/src/jpgraph.php';
require JPGRAPH_PATH . '/src/jpgraph_pie.php';
require JPGRAPH_PATH . '/src/jpgraph_pie3d.php';

if (isset($_GET['from_date']) and isset($_GET['to_date'])) {
  $from_date = addslashes(urldecode($_GET['from_date']));
  $to_date = addslashes(urldecode($_GET['to_date']));
  
  // omezeni statistiky na urcite obdobi
  $sql_access_date = "access_date >= '$from_date' AND access_date <= '$to_date 23:59:59'";

  // vybirame barevne hloubky podle jejich zastoupeni
  $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");
  
  while ($result = mysql_fetch_array($query)) {
    $data[] = $result['count_it'];  // pocet pristupu s jednotlivymi typy barevne hloubky
    $legend[] = $result['description'];  // legenda
  }
  
  // kolacovy graf (velikost)
  $graph = new PieGraph(400,200);
  $graph->SetShadow();  // stin grafu
  
  // titulek (font)
  $graph->title->Set('Barevnß hloubka');
  $graph->title->SetFont(FF_FONT2,FS_BOLD);
  
  // 3D kolacovy graf
  $p1 = new PiePlot3D($data);
  $p1->SetLegends($legend);  // legenda
  $p1->SetCenter(0.25, 0.50);  // pozice kolace
  $p1->SetAngle(45);  // uhel kolace
  //$p1->SetEdge("black", 1); // okraje casti kolace
  
  // pridej 3D kolacovy graf
  $graph->Add($p1);
  
  // zobraz graf
  $graph->Stroke();
}

Ikona se statistick²mi ·daji (graph_counter.php)

Touto ikonou se rozumφ mal² obrßzek (88 x 31 px), na kterΘm je zobrazena dennφ statistika strßnek - tuΦn²m pφsmem poΦet visits a obyΦejn²m pφsmem poΦet shlΘdnut²ch strßnek (pageviews). Pokud chcete tuto ikonu vlo₧it n∞kam do sv²ch strßnek, aby nßvÜt∞vnφci m∞li p°ehled o nßvÜt∞vnosti, m∙₧ete pou₧φt tento kratiΦk² HTML k≤d:

<img src="graph_counter.php" width="88" height="31" border="0" alt="DneÜnφ statistika" />

V²sledkem pak m∙₧e b²t nßsledujφcφ ikona:

DneÜnφ statistika

Skript vytvß°ejφcφ ikonu se statistikou vlo₧φme do souboru graph_counter.php. Proto₧e v²stupem bude obrßzek, musφme pou₧φt p°φsluÜnou hlaviΦku, v naÜem p°φpad∞ to je formßt PNG. Pokud nemßte GD knihovnu, kterß slou₧φ pro prßci s grafikou, naΦtenou neustßle, musφte odkomentovat Φtvrt² °ßdek nßsledujφcφ ukßzky a knihovnu naΦφst "ruΦn∞". Pokud vÜak chcete pou₧φvat knihovnu JpGraph, je lepÜφ upravit soubor php.ini tak, aby GD knihovna byla naΦtena trvale. StaΦφ, kdy₧ bu∩ na °ßdku ;extension=php_gd.dll nebo ;extension=php_gd2.dll odstranφte poΦßteΦnφ st°ednφk.

header('Content-type: image/png');  // vystup je PNG obrazek
require './config.php';  // konfigurace
require './db.php';  // pripojeni k databazi
//dl("php_gd.dll"); // nacte GD knihovnu

V dalÜφ Φßsti musφme urΦit obdobφ, pro kterΘ se statistika bude vytvß°et. NejlepÜφ bude na ikon∞ zobrazovat statistiku pro aktußlnφ den. Nßsledn∞ si z databßze vytßhneme poΦet pageviews a poΦet visits. Jako podklad pou₧ijeme obrßzek counter.png, na kter² pomocφ funkce imagestring vypφÜeme oba zφskanΘ ·daje.

$today = date('Y-m-d');
$sql_access_date = "access_date >= '$today' AND access_date <= '$today 23:59:59'";

// PAGEVIEWS - shlednutΘ stranky
$query = mysql_query("SELECT count(id) FROM access WHERE $sql_access_date");
$result = mysql_fetch_array($query);
$pageviews = $result['count(id)'];

// VISITS
$query = mysql_query("SELECT count(id) FROM access WHERE visit = 1 AND $sql_access_date");
$result = mysql_fetch_array($query);
$visits = $result['count(id)'];

// IKONA
$img = imagecreatefrompng('counter.png'); // vytvori obrazek podle puvodnφho obrazku
$textcolor = imagecolorallocate($img, 0, 64, 128);  // barva textu
imagestring($img, 3, 60, 0, $visits, $textcolor);  // vypise visits
imagestring($img, 2, 60, 15, $pageviews, $textcolor);  // vypise pageviews
imagepng($img);

Instalace Statistiky p°φstup∙

Pozn. aut.: Tento Φlßnek je poslednφ Φßstφ p∙vodnφ sΘrie, proto je zde uveden i odkaz na sta₧enφ hotovΘ aplikace a krßtk² nßvod na jejφ instalaci. Rozhodl jsem se zde tyto ·daje na ₧ßdost Φtenß°∙ doΦasn∞ ponechat - novß verze bude jeÜt∞ pokraΦovat Φlßnky dopl≥ujφcφmi n∞kolik dalÜφch funkcφ - a teprve po ·plnΘm dokonΦenφ je p°esunout do poslednφho Φlßnku sΘrie.

  1. Download - kompletnφ zdrojovΘ k≤dy, pokud budete chtφt pou₧φvat i grafy, nainstalujte si takΘ knihovnu JpGraph (instalace je popsßna v Φlßnku Profesionßlnφ grafy v PHP snadno a rychle)
  2. Vytvo°enφ databßze - nap°φklad pomocφ p°φkazu mysqladmin create counter
  3. Nastavenφ databßze - upravte soubor config.php
  4. Vytvo°enφ databßzov²ch tabulek - pomocφ p°φkazu mysql counter spus¥te klienta, v n∞m zapiÜte p°φkaz \. vase_cesta\counter.sql; (nap°φklad \. c:\lokal\counter\counter.sql;), m∙₧ete vÜak pou₧φt i phpMyAdmin
  5. GD knihovna - pokud nemßte GD knihovnu naΦtenou trvale, odkomentujte v souborech counter.php a graph_counter.php °ßdek //dl("php_gd.dll");
  6. Nastavenφ statistiky - v souboru config.php nastavte pot°ebnΘ ·daje
  7. HTML k≤d - do strßnek, u kter²ch chcete m∞°it statistiku, vlo₧te nßsledujφcφ k≤d (nezapomen≥te upravit cestu k souboru counter.php)
    <script 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>

    <noscript>
    <div>
    <img src="vas_server__/counter.php" width="1" height="1" alt="" />
    </div>
    </noscript>

Pozn. red.: Tento Φlßnek vyÜel poprvΘ 17. 9. 2002. P∙vodnφ verze Φlßnku a k n∞mu vedenΘ diskuse jsou vßm k dispozici v ZIP archivech.

Kebrt, Michal (7. 8. 2004)