Voici un exemple que j'avais réalisé il y a quelques mois.
C'est un script qui affiche un diagramme de statistiques des visites sur mon site.
<?php header("Content-type:image/png"); ?>
<?php
/* ***************************************************************************** */
/* ***************************************************************************** */
/* EXEMPLE DE GRAPHIQUE EN BARRE */
/* ***************************************************************************** */
/* ***************************************************************************** */
// Inclusion d'un fichier qui contient la définition de mes classes
include PHP_PATH.PHP_CLASSES;
?>
<?php
// Requêtes SQL : Récupérer toutes les visites stockées dans la table "Visite"
$Query = new MySqlSelectQuery("Visites", "DISTINCT PAGE", "", "PAGE ASC");
$Cursor = $Query->Execute();
$i = 0;
if(isset($_GET['P']) && !empty($_GET['P']))
{
$Debut = $_GET['P']."-01 00:00:00";
$jours = date("t", mktime(0, 0, 0, $mois, 1, $annee));
$Fin = $_GET['P']."-".$jours." 23:59:59";
}
for($Row = $Cursor->Next(); $Row != null; $Row = $Cursor->Next())
{
if(isset($_GET['P']) && !empty($_GET['P']))
{
$Query2 new MySqlSelectQuery("Visites", "*, UNIX_TIMESTAMP(DATE) AS D", "PAGE '".$Row['PAGE']."' AND DATE >= '".$Debut."' AND DATE <= '".$Fin."'");
}
else
{
$Query2 new MySqlSelectQuery("Visites", "*, UNIX_TIMESTAMP(DATE) AS D", "PAGE '".$Row['PAGE']."'");
}
$Cursor2 = $Query2->Execute();
// On traite les résultats et on les stockes dans un tableau
$Tab[$i]['PAGE'] = $Row['PAGE'];
$Tab[$i]['NOMBRE'] = 0;
for($Row2 = $Cursor2->Next(); $Row2 != null; $Row2 = $Cursor2->Next())
{
$Tab[$i]['NOMBRE']++;
}
$i++;
}
?>
<?php
// Définition des Variables de l'image
$img = imagecreatetruecolor(770, 510);
//// Couleurs ////////////////////////////////////////////////
//// Gris ////
$w = imagecolorallocate($img, 243, 243, 243);
//// Noir ////
$n = imagecolorallocate($img, 0, 0, 0);
//// Bleu ////
$b = imagecolorallocate($img, 60, 123, 207);
//// Orange ////
$o = imagecolorallocate($img, 255, 126, 0);
//// Gris ////
$g = imagecolorallocate($img, 200, 200, 200);
//// Gris Foncé ////
$gf = imagecolorallocate($img,100, 100, 100);
//// Style des Lignes Pointillées ////////////////////////////
$style = array ($w,$w,$w,$w,$g,$g,$g,$g);
imagesetstyle ($img, $style);
//// Constantes//////////////// //////////////////////////////
define("_Y_MAX_", 450);
//// Remplissage en Blanc ////////////////////////////////////
imagefill ($img, 0, 0, $w);
$NombreLignes = count($Tab);
$EspaceLignes = 744 / ($NombreLignes + 1);
$LageurRectangle = $EspaceLignes / 2;
$ll = $EspaceLignes + 25;
for($l = 0; $l < $NombreLignes; $l ++)
{
// Traçage d'une ligne en pointillés
imageline ($img, $ll, 5, $ll, 505, IMG_COLOR_STYLED);
$ll += $EspaceLignes;
}
$N = 0;
$i = abs($Tab[0]['NOMBRE']);
for($N = 0; $N < count($Tab); $N ++)
{
if(abs($Tab[$N]['NOMBRE']) >= $i)
{
$i = abs($Tab[$N]['NOMBRE']);
}
}
if($i == 0)
{
$i = 1;
}
// La variable étalonnage définie la hauteur maximale des lignes. Toutes les autres lignes ne devront pas atteindre cette valeur
$Etalonnage = _Y_MAX_ / $i;
$x = $EspaceLignes / 4;
$x1 = 3 * $x + 25;
$x2 = $x1 + 2 * $x;
//// quadrillage horizontal //////////////////////////////////
if($Etalonnage == 0)
{
$Etalonnage = 1;
}
$e = round(510, $Etalonnage);
for($N = 0; $N < count($Tab); $N ++)
{
$Tab[$N]['Y'] = abs($Tab[$N]['NOMBRE']) * $Etalonnage;
imageline ($img, 25, (505 - $Tab[$N]['Y']), 769, (505 - $Tab[$N]['Y']), IMG_COLOR_STYLED);
imagestring($img, 1, 2, (505 - $Tab[$N]['Y']) - 5, $Tab[$N]['NOMBRE'], $n);
}
for($N = 0; $N < count($Tab); $N ++)
{
$Tab[$N]['Y'] = abs($Tab[$N]['NOMBRE']) * $Etalonnage;
if($Tab[$N]['NOMBRE'] > 0)
{
// Traçage d'un rectangle
imagefilledrectangle ($img, $x1, (505 - $Tab[$N]['Y']), $x2, 505, $b);
$x1 = $x1 + 4 * $x;
$x2 = $x1 + 2 * $x;
}
elseif($Tab[$N]['NOMBRE'] < 0)
{
imagefilledrectangle ($img, $x1, 505, $x2, (505 + $Tab[$N]['Y']), $b);
$x1 = $x1 + 4 * $x;
$x2 = $x1 + 2 * $x;
}
}
$x = $EspaceLignes / 4;
$x1 = 4 * $x;
$x2 = $x1 + 2 * $x;
for($N = 0; $N < count($Tab); $N ++){
if($Tab[$N]['NOMBRE'] >= 0){
imagestring($img, 3, $x1 - 20, (505 - $Tab[$N]['Y']) - 20, $Tab[$N]['PAGE'], $o);
$x1 = $x1 + 4 * $x;
}
else {
imagestring($img, 3, $x1 - 20, (505 + $Tab[$N]['Y']) + 20, $Tab[$N]['PAGE'], $o);
$x1 = $x1 + 4 * $x;
}
}
//// Afficher la Moyenne ///////////////////////////////////////
$Moyenne = 0;
for($iii = 0; $iii < count($Tab); $iii++)
{
$Moyenne += $Tab[$iii]['NOMBRE'];
}
$Moyenne /= count($Tab);
$MoyenneY = 505 - abs($Moyenne) * $Etalonnage;
imageline ($img, 25, $MoyenneY, 769, $MoyenneY, $o);
imageline ($img, 25, 5, 769, 5, $n);
imageline ($img, 25, 505, 769, 505, $n);
imageline ($img, 25, 5, 25, 505, $n);
imageline ($img, 769, 5, 769, 505, $n);
imagestring($img, 1, 45, $MoyenneY - 15, $Moyenne, $o);
imageinterlace($img, 1);
header("Content-type: image/png");
imagepng($img);
?>