Statistiky v PHP 7. díl – Vytvoření grafu

Poslední díl našeho seriálu nám vytvoří kompletní grafický přehled za posledních sto dnů. V grafu se bude zobrazovat denní počet zobrazených stránek modře a počet IP adres červeně.
Poslední díl našeho seriálu nám vytvoří kompletní grafický přehled za posledních sto dnů. V grafu se bude zobrazovat denní počet zobrazených stránek modře a počet IP adres červeně.

Vysvětlivky ke zdrojovému kódu a všem funkcím najdete jako vždy ve zdrojovém kódu. Jako pozadí grafu použijeme tento obrázek, který si uložte jako pozadi.jpg. Nezapomeňte si ho nahrát do stejného adresáře, kde máte graf.php. Z hlediska optimalizace by pochopitelně byl vhodnější GIF, ten ale nemůžeme použít.

Pro zapsání data a hodnot budeme také potřebovat styl písma. V našem případě použijeme Arial, který si překopírujte z adresáře fonts ve vaší instalaci Windows(arial.ttf).

A zde je zmíněný zdrojový kód:

<?
/* nastaveni promennych a nasledne pripojeni do databaze */
$server = "localhost";
$login = "";
$pass = "";
$database = "statistiky";

mysql_connect($server, $login, $pass);
mysql_select_db($database);

echo "<table width=700 border=0 align=CENTER><tr><td>";

/* fce unlink() slouzi ke smazani souboru - kdyz tedy soubor existuje, tak ho smazeme*/
unlink("graf1.jpg");

/* vytvoreni obrazku a alokace barvy */
$obrazek = imagecreatefromjpeg("pozadi.jpg");
$zelena = imagecolorallocate($obrazek, 114, 218, 31);
$modra = imagecolorallocate($obrazek, 0, 0, 0);
//$zelena = imagecolorallocate($obrazek, 0, 0, 0);
$cervena = imagecolorallocate($obrazek, 237, 0, 0);

/* vybere nejvyssi hodnotu z DB a udela z ni koeficient */
$nej_hodnota = mysql_query("select max(stranek) as `stranek` from prehled");
while ($zaznam1 = MySQL_Fetch_Array($nej_hodnota)):
$top = $zaznam1["stranek"];
endwhile;
$pomer = ($top / 230);
$hodnota1 = round($top-(4*($top/5)));
$hodnota2 = round($top-(3*($top/5)));
$hodnota3 = round($top-(2*($top/5)));
$hodnota4 = round($top-($top/5));
$hodnota5 = $top;


/* zjisti celkovy pocet zaznamu v DB */
$vysledek_x = mysql_query("select stranek from prehled");
$pocet_zaznamu = mysql_num_rows($vysledek_x);

/* STRANKY - vybere prvni zaznam z DB a nakresli caru, preda a, b */
$vysledek = mysql_query("select stranek, datum from prehled order by time asc limit 0, 1");
while ($zaznam = MySQL_Fetch_Array($vysledek)):
$stranka = $zaznam["stranek"];
$datum = $zaznam["datum"];
$y = ($stranka)/$pomer;
$x = ($x+50);
$a = $x;
$y = (250-$y);
$b = $y;
imageline($obrazek, 51, 249, $x, $y, $zelena);
imagettftext($obrazek, 8, 90, 54, 300, $modra, "arial.ttf", "$datum");
endwhile;


/* STRANKY - vybere druhy az posledni zaznam z DB a cyklicky dokresluje caru */
$posun = "54";
$vysledek = mysql_query("select stranek, datum from prehled order by time asc limit 1, $pocet_zaznamu");
while ($zaznam = MySQL_Fetch_Array($vysledek)):
$stranka = $zaznam["stranek"];
$datum = $zaznam["datum"];
$y = ($stranka)/$pomer;
$x = ($x+20);
$y = (250-$y);
$posun = ($posun + 20);
imageline($obrazek, $a, $b, $x, $y, $zelena);
imagettftext($obrazek, 8, 90, $posun, 300, $modra, "arial.ttf", "$datum");
$a=$x;
$b=$y;
endwhile;

/* STRANKY - vezme posledni hodnotu z grafu a vytvori kolmou caru */
imageline($obrazek, $x, $y, $x, 250, $zelena);


/* IP - vybere prvni zaznam z DB a nakresli caru, preda a, b */
$x="30";
$vysledek = mysql_query("select lidi from prehled order by time asc limit 0, 1");
while ($zaznam = MySQL_Fetch_Array($vysledek)):
$stranka = $zaznam["lidi"];
$y = ($stranka)/$pomer;
$x = ($x+20);
$a = $x;
$y = (250-$y);
$b = $y;
imageline($obrazek, 51, 249, $x, $y, $cervena);
endwhile;

/* IP -vybere druhy az posledni zaznam z DB a cyklicky dokresluje caru */
$vysledek = mysql_query("select lidi from prehled order by time asc limit 1, $pocet_zaznamu");
while ($zaznam = MySQL_Fetch_Array($vysledek)):
$stranka = $zaznam["lidi"];
$y = ($stranka)/$pomer;
$x = ($x+20);
$y = (250-$y);
imageline($obrazek, $a, $b, $x, $y, $cervena);
$a=$x;
$b=$y;
endwhile;

/* IP - vezme posledni hodnotu z grafu a stejne jako u stranek nakresli kolmou caru*/
imageline($obrazek, $x, $y, $x, 250, $cervena);

/* doplneni hodnot - levy sloupec */
imagettftext($obrazek, 12, 0, 5, 256, $modra, "arial.ttf", "0");
imagettftext($obrazek, 12, 0, 5, 206, $modra, "arial.ttf", "$hodnota1");
imagettftext($obrazek, 12, 0, 5, 156, $modra, "arial.ttf", "$hodnota2");
imagettftext($obrazek, 12, 0, 5, 106, $modra, "arial.ttf", "$hodnota3");
imagettftext($obrazek, 12, 0, 5, 56, $modra, "arial.ttf", "$hodnota4");
imagettftext($obrazek, 12, 0, 5, 12, $modra, "arial.ttf", "$hodnota5");


/* vytvori obrazek */
imagejpeg($obrazek, "graf1.jpg", 100);

/* vypise legendu s prave vytvorenym grafem */
echo "<table width=700 border=0>";

echo "<tr><td> </td></tr></table>";
echo "<font face=Verdana, Arial, Helvetica, sans-serif size=4><b><font size=2>Vývoj počtu zobrazených stránek - graf</font></b></font><br><br>";
echo "<table border=0 width=160 cellpadding=0>";
echo "<tr><td width=156 height=2><b><font face=Verdana, Arial, Helvetica, sans-serif size=2>Počet stránek</font></b></td>";
echo "<td width=12 bgcolor=#99CC66 height=2> </td></tr>";
echo "<tr><td width=156><b><font face=Verdana, Arial, Helvetica, sans-serif size=2>Počet unikátních IP</font></b></td>";
echo "<td width=12 bgcolor=#852D2B> </td></tr></table>";
echo "<br><img src=graf1.jpg></td></tr></table>";
?>

Díky tomuto skriptu jsme si uzavřeli celý seriál o statistikách v PHP. Pomocí všech skriptů, které jsem v článcích uvedl si dáte dohromady kompletní statistiky, které můžete využít na jakýchkoliv webových stránkách.

V případě, že vaše skripty budou rozvětvené do několika podadresářů budete muset místo všech funkcí include() vložit do souboru count.php jejich obsahy.

Diskuze (17) Další článek: Zmenšení velikosti profilů na serveru

Témata článku: , , , , , , , , , , , , , , , , ,