[TUTO] : Comment faire un compteur de visite par journée et intégrer les résultats dans un graph ?

Avatar de l’utilisateur
Eléphant du PHP | 100 Messages

25 août 2015, 16:52

Bonjour,
Je vais vous montrer comment faire pour faire un compteur de visite par jour d'une page et l'intégrer dans un graphique.
Pour le compteur, je me suis basé de celui-ci : http://www.supportduweb.com/scripts_tut ... s-php.html
Créez le fichier compteur.php dans le dossier que l'on appellera visiteurs :
<?php
session_start();
$date = date("d-m-Y");
if(file_exists($date))
{
        $compteur_f = fopen($date, 'r+');
        $compte = fgets($compteur_f);
}
else
{
        $compteur_f = fopen($date, 'a+');
        $compte = 0;
}
if(!isset($_SESSION['compteur_de_visite']))
{
        $_SESSION['compteur_de_visite'] = 'visite';
        $compte++;
        fseek($compteur_f, 0);
        fputs($compteur_f, $compte);
}
fclose($compteur_f);
?>
Placez ce code sur les pages que vous voulez compter :
<iframe style="border:none;" src="http://votreserveur/visiteurs/compteur.php" height="0" width="0">Your browser doesn't seem to support iframes.</iframe>
Maintenant, téléchargez l'archive contenant le graph et extrayez-là: http://www.petit-fichier.fr/2015/08/25/compteur/
Uploadez ces fichiers où vous voulez sur votre serveur. Pour qu'il fonctionne, vous devrez indiquez obligatoirement lors de l'accès à l'url :
• le nombre du mois dans la variable m (ex graph.php?m=08)
• L'année dans la variable y (ex graph.php?y=2015)
et optionnellement la couleur dans la variable color
ex graph.php?color=#3B96E2

Donc normalement, vous avez une url comme ça : http://votreserveur/graph.php?m=08&y=2015&color=#3B96E2
Vous avez juste à changer 08 par un autre mois et 2015 par une autre année pour voir vos stats d'un autre mois.
Je mettrai d'autres sortes de graphiques prochainement et ferait un tuto comprenant visiteurs par mois.
j'espère que vous avez compris ce tuto.

Avatar de l’utilisateur
Administrateur PHPfrance
Administrateur PHPfrance | 7158 Messages

25 août 2015, 18:42

Bonjour,

Une idée d'optimisation serait d'utiliser un tag image ou javascript plutôt qu'un tag iframe.

Exemple pour renvoyer un gif de 1x1px transparent :
header('Content-Type: image/gif');
echo base64_decode('R0lGODlhAQABAIABAP///wAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=='
Quand tout le reste a échoué, lisez le mode d'emploi...

Avatar de l’utilisateur
Eléphant du PHP | 100 Messages

25 août 2015, 20:45

C'est une bonne idée. Là, j'avais à peine commencer à compiler tout. J'ai réussi avec plusieurs sortes de graphiques (avec le iframe), je vais essayer avec l'image.
Pour l'instant, j'ai réussi des graphiques comme ceci automatiques grâce au compteur : http://forum-racacax.ga/viewtopic.php?f=26&t=866 . Il y a ça aussi : http://koditv.ga/graph/cercle/graph.php ... A9e%202015 mais ça ne se voit pas vu qu'il n'y a qu'un seul mois d'actif.

Avatar de l’utilisateur
Eléphant du PHP | 100 Messages

26 août 2015, 13:08

Pour les calculs des utilisateurs du logiciel ZedTV (l'accueil est une page HTML), j'ai utiliser une image 1px et cela fonctionne très bien.
Merci pour l'astuce.
Voici les graphiques que l'on peut effectuer :
Pourcentage d'utilisateurs entre plusieurs sites : http://koditv.ga/graph/cercle2/graph.ph ... %20TV%20Fr

Pourcentage d'utilisateurs selon le mois (pour un site) : http://koditv.ga/graph/cercle/graph.php ... 0le%20mois

Visiteurs pour un site par jour en un mois : http://forum-racacax.ga/stats/aout.php?m=08&y=2015
Visiteurs pour un site par mois en un an: http://forum-racacax.ga/stats/aout.php?y=2015

Là, j'essaie d'adapter les années bissextiles...

Edit : J'ai réussi. C'était facile car les if() else {} sont les trucs que je fais le plus souvent. je pense qu'il y a plus simple mais voici :
<?php if(isset($_GET['bi'])) { echo '29'; } else { if($_GET['m'] == '02') { echo '28'; } else { if(isset($_GET['m']) && ($_GET['m'] == "04" || $_GET['m'] == "06" || $_GET['m'] == "09" || $_GET['m'] == "11")){ echo '30'; } else { if(isset($_GET['m']) && ($_GET['m'] == "01" || $_GET['m'] == "03" || $_GET['m'] == "05" || $_GET['m'] == "07" || $_GET['m'] == "08" || $_GET['m'] == "10" || $_GET['m'] == "12")){ echo '31'; } else { echo '12'; }}}} ?>
Donc, traduction, si l'utilisateur met ?bi=nimoprtequoi, le nombre de jours sera 29. Pratique lorsque l'année est bissextile (/!\ A utiliser uniquement pour février). Sinon, si ?m=02, le nombre de jours sera 28 (année normale pour février) sinon si ?m=04, 06, 09 ou 11, le nombre de jours sera 30, sinon, si ?m=01,03,05,07,08,10 ou 12, le nombre de jours sera 31 sinon, ce sera le compte en année qui sera fait et le nombre affiché sera le nombre de mois donc 12.

Avatar de l’utilisateur
Administrateur PHPfrance
Administrateur PHPfrance | 7158 Messages

26 août 2015, 15:30

Félicitations ! :-D

Tu viens de réinventer la fonction PHP cal_days_in_month() :idea: 8-)



Bon je te charrie mais blague à part, je ne connaissais pas non plus cette fonction, c'est en cherchant une solution pour simplifier ton code que je viens de tomber dessus ;)
Quand tout le reste a échoué, lisez le mode d'emploi...

Avatar de l’utilisateur
Eléphant du PHP | 100 Messages

26 août 2015, 15:52

:D Exact pour ce graphique ça fonctionnerait très bien. mais pour ceux ci :
http://koditv.ga/graph/comparatif3/grap ... %20Racacax
http://koditv.ga/graph/comparatif3fuspc ... %20Racacax

ça ne passerait pas car il faudrait des Ifs car c'est une ligne entière qu'il faudrait afficher ou pas afficher. attention aux personnes souffrants d'épilepsie, ça fait mal aux yeux. Voir cet (horrible) code :
[Date.UTC(<?php echo $_GET['y']; ?>, <?php echo $_GET['m'] - 1; ?>, 1), <?php @$oo = file_get_contents('http://'.$_SERVER['HTTP_HOST'].'/visiteurs/01-'.$_GET['m'].'-'.$_GET['y']); echo $oo; if(empty($oo)) { echo '0'; } else { } ?>],
                [Date.UTC(<?php echo $_GET['y']; ?>, <?php echo $_GET['m'] - 1; ?>, 2), <?php @$oo = file_get_contents('http://'.$_SERVER['HTTP_HOST'].'/visiteurs/02-'.$_GET['m'].'-'.$_GET['y']); echo $oo; if(empty($oo)) { echo '0'; } else { } ?>],
                [Date.UTC(<?php echo $_GET['y']; ?>, <?php echo $_GET['m'] - 1; ?>, 3), <?php @$oo = file_get_contents('http://'.$_SERVER['HTTP_HOST'].'/visiteurs/03-'.$_GET['m'].'-'.$_GET['y']); echo $oo; if(empty($oo)) { echo '0'; } else { } ?>],
                [Date.UTC(<?php echo $_GET['y']; ?>, <?php echo $_GET['m'] - 1; ?>, 4), <?php @$oo = file_get_contents('http://'.$_SERVER['HTTP_HOST'].'/visiteurs/04-'.$_GET['m'].'-'.$_GET['y']); echo $oo; if(empty($oo)) { echo '0'; } else { } ?>],
                [Date.UTC(<?php echo $_GET['y']; ?>, <?php echo $_GET['m'] - 1; ?>, 5), <?php @$oo = file_get_contents('http://'.$_SERVER['HTTP_HOST'].'/visiteurs/05-'.$_GET['m'].'-'.$_GET['y']); echo $oo; if(empty($oo)) { echo '0'; } else { } ?>],
                [Date.UTC(<?php echo $_GET['y']; ?>, <?php echo $_GET['m'] - 1; ?>, 6), <?php @$oo = file_get_contents('http://'.$_SERVER['HTTP_HOST'].'/visiteurs/06-'.$_GET['m'].'-'.$_GET['y']); echo $oo; if(empty($oo)) { echo '0'; } else { } ?>],
                [Date.UTC(<?php echo $_GET['y']; ?>, <?php echo $_GET['m'] - 1; ?>, 7), <?php @$oo = file_get_contents('http://'.$_SERVER['HTTP_HOST'].'/visiteurs/07-'.$_GET['m'].'-'.$_GET['y']); echo $oo; if(empty($oo)) { echo '0'; } else { } ?>],
                [Date.UTC(<?php echo $_GET['y']; ?>, <?php echo $_GET['m'] - 1; ?>, 8), <?php @$oo = file_get_contents('http://'.$_SERVER['HTTP_HOST'].'/visiteurs/08-'.$_GET['m'].'-'.$_GET['y']); echo $oo; if(empty($oo)) { echo '0'; } else { } ?>],
                [Date.UTC(<?php echo $_GET['y']; ?>, <?php echo $_GET['m'] - 1; ?>, 9), <?php @$oo = file_get_contents('http://'.$_SERVER['HTTP_HOST'].'/visiteurs/09-'.$_GET['m'].'-'.$_GET['y']); echo $oo; if(empty($oo)) { echo '0'; } else { } ?>],
                [Date.UTC(<?php echo $_GET['y']; ?>, <?php echo $_GET['m'] - 1; ?>, 10), <?php @$oo = file_get_contents('http://'.$_SERVER['HTTP_HOST'].'/visiteurs/10-'.$_GET['m'].'-'.$_GET['y']); echo $oo; if(empty($oo)) { echo '0'; } else { } ?>],
                [Date.UTC(<?php echo $_GET['y']; ?>, <?php echo $_GET['m'] - 1; ?>, 11), <?php @$oo = file_get_contents('http://'.$_SERVER['HTTP_HOST'].'/visiteurs/11-'.$_GET['m'].'-'.$_GET['y']); echo $oo; if(empty($oo)) { echo '0'; } else { } ?>],
                [Date.UTC(<?php echo $_GET['y']; ?>, <?php echo $_GET['m'] - 1; ?>, 12), <?php @$oo = file_get_contents('http://'.$_SERVER['HTTP_HOST'].'/visiteurs/12-'.$_GET['m'].'-'.$_GET['y']); echo $oo; if(empty($oo)) { echo '0'; } else { } ?>],
                [Date.UTC(<?php echo $_GET['y']; ?>, <?php echo $_GET['m'] - 1; ?>, 13), <?php @$oo = file_get_contents('http://'.$_SERVER['HTTP_HOST'].'/visiteurs/13-'.$_GET['m'].'-'.$_GET['y']); echo $oo; if(empty($oo)) { echo '0'; } else { } ?>],
                [Date.UTC(<?php echo $_GET['y']; ?>, <?php echo $_GET['m'] - 1; ?>, 14), <?php @$oo = file_get_contents('http://'.$_SERVER['HTTP_HOST'].'/visiteurs/14-'.$_GET['m'].'-'.$_GET['y']); echo $oo; if(empty($oo)) { echo '0'; } else { } ?>],
                [Date.UTC(<?php echo $_GET['y']; ?>, <?php echo $_GET['m'] - 1; ?>, 15), <?php @$oo = file_get_contents('http://'.$_SERVER['HTTP_HOST'].'/visiteurs/15-'.$_GET['m'].'-'.$_GET['y']); echo $oo; if(empty($oo)) { echo '0'; } else { } ?>],
                [Date.UTC(<?php echo $_GET['y']; ?>, <?php echo $_GET['m'] - 1; ?>, 16), <?php @$oo = file_get_contents('http://'.$_SERVER['HTTP_HOST'].'/visiteurs/16-'.$_GET['m'].'-'.$_GET['y']); echo $oo; if(empty($oo)) { echo '0'; } else { } ?>],
                [Date.UTC(<?php echo $_GET['y']; ?>, <?php echo $_GET['m'] - 1; ?>, 17), <?php @$oo = file_get_contents('http://'.$_SERVER['HTTP_HOST'].'/visiteurs/17-'.$_GET['m'].'-'.$_GET['y']); echo $oo; if(empty($oo)) { echo '0'; } else { } ?>],
                [Date.UTC(<?php echo $_GET['y']; ?>, <?php echo $_GET['m'] - 1; ?>, 18), <?php @$oo = file_get_contents('http://'.$_SERVER['HTTP_HOST'].'/visiteurs/18-'.$_GET['m'].'-'.$_GET['y']); echo $oo; if(empty($oo)) { echo '0'; } else { } ?>],
				[Date.UTC(<?php echo $_GET['y']; ?>, <?php echo $_GET['m'] - 1; ?>, 19), <?php @$oo = file_get_contents('http://'.$_SERVER['HTTP_HOST'].'/visiteurs/19-'.$_GET['m'].'-'.$_GET['y']); echo $oo; if(empty($oo)) { echo '0'; } else { } ?>],
				[Date.UTC(<?php echo $_GET['y']; ?>, <?php echo $_GET['m'] - 1; ?>, 20), <?php @$oo = file_get_contents('http://'.$_SERVER['HTTP_HOST'].'/visiteurs/20-'.$_GET['m'].'-'.$_GET['y']); echo $oo; if(empty($oo)) { echo '0'; } else { } ?>],
				[Date.UTC(<?php echo $_GET['y']; ?>, <?php echo $_GET['m'] - 1; ?>, 21), <?php @$oo = file_get_contents('http://'.$_SERVER['HTTP_HOST'].'/visiteurs/21-'.$_GET['m'].'-'.$_GET['y']); echo $oo; if(empty($oo)) { echo '0'; } else { } ?>],
				[Date.UTC(<?php echo $_GET['y']; ?>, <?php echo $_GET['m'] - 1; ?>, 22), <?php @$oo = file_get_contents('http://'.$_SERVER['HTTP_HOST'].'/visiteurs/22-'.$_GET['m'].'-'.$_GET['y']); echo $oo; if(empty($oo)) { echo '0'; } else { } ?>],
				[Date.UTC(<?php echo $_GET['y']; ?>, <?php echo $_GET['m'] - 1; ?>, 23), <?php @$oo = file_get_contents('http://'.$_SERVER['HTTP_HOST'].'/visiteurs/23-'.$_GET['m'].'-'.$_GET['y']); echo $oo; if(empty($oo)) { echo '0'; } else { } ?>],
				[Date.UTC(<?php echo $_GET['y']; ?>, <?php echo $_GET['m'] - 1; ?>, 24), <?php @$oo = file_get_contents('http://'.$_SERVER['HTTP_HOST'].'/visiteurs/24-'.$_GET['m'].'-'.$_GET['y']); echo $oo; if(empty($oo)) { echo '0'; } else { } ?>],
				[Date.UTC(<?php echo $_GET['y']; ?>, <?php echo $_GET['m'] - 1; ?>, 25), <?php @$oo = file_get_contents('http://'.$_SERVER['HTTP_HOST'].'/visiteurs/25-'.$_GET['m'].'-'.$_GET['y']); echo $oo; if(empty($oo)) { echo '0'; } else { } ?>],
				[Date.UTC(<?php echo $_GET['y']; ?>, <?php echo $_GET['m'] - 1; ?>, 26), <?php @$oo = file_get_contents('http://'.$_SERVER['HTTP_HOST'].'/visiteurs/26-'.$_GET['m'].'-'.$_GET['y']); echo $oo; if(empty($oo)) { echo '0'; } else { } ?>],
				[Date.UTC(<?php echo $_GET['y']; ?>, <?php echo $_GET['m'] - 1; ?>, 27), <?php @$oo = file_get_contents('http://'.$_SERVER['HTTP_HOST'].'/visiteurs/27-'.$_GET['m'].'-'.$_GET['y']); echo $oo; if(empty($oo)) { echo '0'; } else { } ?>],
				[Date.UTC(<?php echo $_GET['y']; ?>, <?php echo $_GET['m'] - 1; ?>, 28), <?php @$oo = file_get_contents('http://'.$_SERVER['HTTP_HOST'].'/visiteurs/28-'.$_GET['m'].'-'.$_GET['y']); echo $oo; if(empty($oo)) { echo '0'; } else { } ?>],
				<?php if(isset($_GET['m']) && ($_GET['m'] == "01" || $_GET['m'] == "05" || $_GET['m'] == "03" || $_GET['m'] == "04" || $_GET['m'] == "06" || $_GET['m'] == "07" || $_GET['m'] == "08" || $_GET['m'] == "09" || $_GET['m'] == "10" || $_GET['m'] == "11" || $_GET['m'] == "12")){ 	?>		[Date.UTC(<?php echo $_GET['y']; ?>, <?php echo $_GET['m'] - 1; ?>, 29), <?php @$oo = file_get_contents('http://'.$_SERVER['HTTP_HOST'].'/visiteurs/29-'.$_GET['m'].'-'.$_GET['y']); echo $oo; if(empty($oo)) { echo '0'; } else { } ?>], <?php } else { if(isset($_GET['bi'])) { ?>[Date.UTC(<?php echo $_GET['y']; ?>, <?php echo $_GET['m'] - 1; ?>, 29), <?php @$oo = file_get_contents('http://'.$_SERVER['HTTP_HOST'].'/visiteurs/29-'.$_GET['m'].'-'.$_GET['y']); echo $oo; if(empty($oo)) { echo '0'; } else { } ?>], <?php }} ?>
	<?php if(isset($_GET['m']) && ($_GET['m'] == "01" || $_GET['m'] == "05" || $_GET['m'] == "03" || $_GET['m'] == "04" || $_GET['m'] == "06" || $_GET['m'] == "07" || $_GET['m'] == "08" || $_GET['m'] == "09" || $_GET['m'] == "10" || $_GET['m'] == "11" || $_GET['m'] == "12")){ 	?>			[Date.UTC(<?php echo $_GET['y']; ?>, <?php echo $_GET['m'] - 1; ?>, 30), <?php @$oo = file_get_contents('http://'.$_SERVER['HTTP_HOST'].'/visiteurs/30-'.$_GET['m'].'-'.$_GET['y']); echo $oo; if(empty($oo)) { echo '0'; } else { } ?>], <?php } else { } ?>
	<?php if(isset($_GET['m']) && ($_GET['m'] == "01" || $_GET['m'] == "03" || $_GET['m'] == "05" || $_GET['m'] == "07" || $_GET['m'] == "08" || $_GET['m'] == "10" || $_GET['m'] == "12")){ 	?>			[Date.UTC(<?php echo $_GET['y']; ?>, <?php echo $_GET['m'] - 1; ?>, 31), <?php @$oo = file_get_contents('http://'.$_SERVER['HTTP_HOST'].'/visiteurs/31-'.$_GET['m'].'-'.$_GET['y']); echo $oo; if(empty($oo)) { echo '0'; } else { } ?>],<?php } else {} ?>

Avatar de l’utilisateur
Administrateur PHPfrance
Administrateur PHPfrance | 7158 Messages

26 août 2015, 16:23

Effectivement, ça pique les yeux...
A priori tu répètes la même ligne n fois en fonction du nombre de jour donc il devrait te suffire de faire une boucle for() de 1 jusqu'au nombre de jours dans le mois sélectionné, non ?
Quand tout le reste a échoué, lisez le mode d'emploi...

Avatar de l’utilisateur
Eléphant du PHP | 100 Messages

26 août 2015, 16:28

Je ne suis pas encore à ce niveau :(, j'ai déjà essayé d'utiliser for mais sans succès.

Avatar de l’utilisateur
Administrateur PHPfrance
Administrateur PHPfrance | 7158 Messages

26 août 2015, 17:01

Fait rapidement, ça devrait donner quelque chose du genre :
<?php

// 1) On filtre les données récupérées en paramètres
$annee=filter_var($_GET['y'], FILTER_SANITIZE_NUMBER_INT);
$mois=filter_var($_GET['m'], FILTER_SANITIZE_NUMBER_INT);

// 2) On boucle pour chaque jour du mois indiqué
for ($jour=1; $jour <= cal_days_in_month(CAL_GREGORIAN, (int) $mois, $annee); $jour++) {

	// 3) On récupère le nombre de visites ce jour
	$nb_visites = @file_get_contents('http://'.$_SERVER['HTTP_HOST'].'/visiteurs/'.$jour.'-'.$mois.'-'.$annee);
	// 4) si on n'obtient rien, c'est probablement que le fichier n'existe pas et on le met donc à 0
	if (empty($nb_visites)) $nb_visites = 0;

	// 5) On affiche la ligne pour le jour concerné
	print "[Date.UTC(".$annee.", ".$mois.", ".$jour."), ".$nb_visites."],\r\n";
}
J'ai mis des commentaires pour que tu comprennes comment j'ai procédé.
Quand tout le reste a échoué, lisez le mode d'emploi...

Avatar de l’utilisateur
Eléphant du PHP | 100 Messages

28 août 2015, 18:18

Merci,
J'analyse tout celà, merci beaucoup pour l'aide, je vais changer les codes au plus simple et mettrait un pack avec tous les types de graph. Je mettrai des tutoriels à l'intérieur pour expliquer comment faire, notamment pour les comparatif où, dans certains cas, le compteur de visites est hébergé sur un autre serveur. Un jour, peut être, je pourrai créer une interface autonome mais ce n'est pas pour l'instant car je ne suis pas encore dans mes études en développement. Il fat déjà que je réussisse ma seconde.