Forum ZitePLUS

La communauté des utilisateurs du CMS ZitePLUS

Vous n'êtes pas identifié(e).

#1 12/06/2010 12:11:34

Fredo42
Membre
Inscription : 03/10/2009
Messages : 470
Site Web

Compteur visites

Ce script affiche le nombre de visiteurs actuellement sur le site, le nombre de visites reçues aujourd'hui, depuis le début de la semaine, du mois, de l'année, et le nombre total de visites.
Démo complète ici: http://s303106998.onlinehome.fr/
Sinon le code est partiellement utilisé ici: http://uv7ab.free.fr/

<?php
/*
* Si le fichier où l'on stock,
* les données n'existe pas encore
* on le crée.
*/
$fichier = '.htcompteur'; //fichier où sont stockées les données
if( !file_exists($fichier) ) {
$fp = fopen($fichier, "w");
fwrite($fp, serialize(array()));
fclose($fp);
}

$argument_visitestotal = 'visitestotal';
$argument_visitessemaine = 'visitessemaine';
$argument_visitesmois = 'visitesmois';
$argument_visitesan = 'visitesan';
$ip = $_SERVER['REMOTE_ADDR'];
$time = date('YmdHis');
$visiteuractuel=0;
$argument_requetes = 'requetes';

/*
* Récupération des données du
* compteur précédemment stockées.
*/
$lignes = file($fichier);
$donnees = unserialize($lignes[0]);

/*
* Pour chaque clés du tableau de données
* qui ne soit pas attribuée aux visite et aux requêtes
* si la valeur correspond à une date antérieur
* au même jour, on supprime l'ip du visiteur.
*/
foreach( $donnees as $cle => $valeur )
{
if( substr($valeur, 0, 8) != substr($time, 0, 8) &&
$cle != $argument_visitestotal &&
$cle != $argument_visitessemaine &&
$cle != $argument_visitesmois &&
$cle != $argument_visitesan &&
$cle != $argument_requetes) {
unset($donnees[$cle]);
}
}
/*
* On incrémente ( ajoute +1 ) la valeur
* du nombre de requêtes.
* Si l'ip n'est pas encore enregistrée,
* on incrémente la valeur du nombre de visites
* et on ajoute l'ip dans le tableau accompagné
* de la date et de l'heure de l'exécution.
*/
$donnees[$argument_requetes]++;
if( !$donnees[$ip] ) {
$donnees[$argument_visitestotal]++;

if((substr($time,0,4)) == (substr($valeur,0,4)) &&
$cle != $argument_visitestotal &&
$cle != $argument_visitessemaine &&
$cle != $argument_visitesmois &&
$cle != $argument_visitesan &&
$cle != $argument_requetes) {
$donnees[$argument_visitesan]++;
} else { $donnees[$argument_visitesan]=1;}

if((substr($time,4,2)) == (substr($valeur,4,2)) &&
$cle != $argument_visitestotal &&
$cle != $argument_visitessemaine &&
$cle != $argument_visitesmois &&
$cle != $argument_visitesan &&
$cle != $argument_requetes) {
$donnees[$argument_visitesmois]++;
} else { $donnees[$argument_visitesmois]=1;}

if(date('W',mktime ((substr($time,8,2)),(substr($time,10,2)),(substr($time,12,2)),(substr($time,4,2)),(substr($time,6,2)),(substr($time,0,4)))) == (date('W',mktime ((substr($valeur,8,2)),(substr($valeur,10,2)),(substr($valeur,12,2)),(substr($valeur,4,2)),(substr($valeur,6,2)),(substr($valeur,0,4))))) &&
$cle != $argument_visitestotal &&
$cle != $argument_visitessemaine &&
$cle != $argument_visitesmois &&
$cle != $argument_visitesan &&
$cle != $argument_requetes) {
$donnees[$argument_visitessemaine]++;
} else { $donnees[$argument_visitessemaine]=1;}

$donnees[$ip] = $time;
}
/*
* Si l'ip est déjà enregistrée,
* on met à jour la date et l'heure.
*/
else {
$donnees[$ip] = $time;
}

/*
* Pour compter les visiteurs actuel
* on considère que si l'ip a été enregistré
* il y a moins de 3 minutes, le visiteur
* est toujours là.
* 3 minutes => 3/60 = 0.05 minute décimale
*/
foreach( $donnees as $cle => $valeur )
{
if(((substr($time,8,2)+(substr($time,10,2))/60))-((substr($valeur,8,2)+(substr($valeur,10,2))/60)) < 0.05  &&
$cle != $argument_visites &&
$cle != $argument_requetes ) {
$visiteuractuel++;
}
}

/*
* On effectue un petit report de variable
* pour une utilisation ultérieur plus aisée.
*/
$nb_visiteurstotal = $donnees[$argument_visitestotal];
$nb_visiteursan = $donnees[$argument_visitesan];
$nb_visiteursmois = $donnees[$argument_visitesmois];
$nb_visiteurssemaine = $donnees[$argument_visitessemaine];
$nb_pagesaffichees = $donnees[$argument_requetes];
$nb_aujourdhui = count($donnees)-5;

/*
* On stock le tableau dans le fichier de données
* en écrasant sa valeur précédente.
*/
$fp = fopen($fichier,"w");
fwrite($fp, serialize($donnees));
fclose($fp);

/*
* On affiche les résultats du compteur.
*/
?>
<br>
<center>
<h3>Nombre de visites</h3><table>
<tr><td width="120px">Maintenant :</td><td width="30px" align="right"><?php echo $visiteuractuel ?></td></tr>
<tr><td width="120px">Aujourd'hui :</td><td width="30px" align="right"><?php echo $nb_aujourdhui ?></td></tr>
<tr><td width="120px">Cette semaine :</td><td width="30px" align="right"><?php echo $nb_visiteurssemaine ?></td></tr>
<tr><td width="120px">Ce mois :</td><td width="30px" align="right"><?php echo $nb_visiteursmois ?></td></tr>
<tr><td width="120px">Cette année :</td><td width="30px" align="right"><?php echo $nb_visiteursan ?></td></tr>
<tr><td width="120px">Total des visites :</td><td width="30px" align="right"><?php echo $nb_visiteurstotal ?></td></tr><tr><td> </td></tr>
<tr><td width="120px">Pages affichées:</td><td width="30px" align="right"><?php echo $nb_pagesaffichees ?></td></tr>
</table></center>

Dernière modification par Fredo42 (12/06/2010 12:20:02)


Mieux vaut poser une question et passer pour un con, que se taire et le rester...

Hors ligne

#2 12/06/2010 18:24:52

bpat85
Membre
Inscription : 18/01/2010
Messages : 77

Re : Compteur visites

Comme toutes les sources présentées ... nickel chrome.
Vais finir par me demander à quoi ça sert d'avoir des hébergements avec bdd wink

Hors ligne

#3 12/06/2010 18:36:20

Fredo42
Membre
Inscription : 03/10/2009
Messages : 470
Site Web

Re : Compteur visites

Merci.
J'ai juste mis en 1 script les 2 scripts que j'avais mis dans un autre sujet du forum: http://www.zitecms.org/zite/forum/viewtopic.php?id=510
Comme ça il y a juste à modifier la partie affichage pour afficher uniquement ce qu'on veut voir apparaitre sur le site.


Mieux vaut poser une question et passer pour un con, que se taire et le rester...

Hors ligne

#4 16/09/2010 17:34:59

pydou
Membre
Lieu : Caluire
Inscription : 01/04/2010
Messages : 109
Site Web

Re : Compteur visites

Je suis allé un peu plus loin dans le compteur de visites ... en y ajoutant des statistiques (heure, jour, mois) et un module de suivi et RAZ des résultats ...

Code de la page qui incrémente les statistiques :

<center><font size="1">Site motorisé par <a href="http://www.giausserand.fr/index.php?perma=ziteplus"> <?php echo ZITEVER ?></a><br />
<?php
/* Si le fichier où l'on stocke les données n'existe pas encore, on le crée.*/
$fichier = 'zdata/stats.dta';
if( !file_exists($fichier) ) {
  $fp = fopen($fichier, "w");
  fwrite($fp, serialize(array()));
  fclose($fp);
}

/* Définition de variables nécessaire au compteur :
* - deux termes constants,
* - l'ip du visiteur,
* - la date et l'heure. */
$ip = $_SERVER['REMOTE_ADDR'];
$time = date('YmdGis');
$hday = "H".date('H');
$jsem = "S".date('w');
$myer = "M".date('m');
$last = date('Ymd');

/* Récupération des données du compteur précédemment stockées.*/
$lignes = file($fichier);
$donnees = unserialize($lignes[0]);

/* Pour chaque clés du tableau de données qui ne soit pas attribuée aux visite et aux requetes si la valeur correspond à une date antérieur au même jour, on supprime l'ip du visiteur.*/
foreach( $donnees as $cle => $valeur ) {
  if( substr($valeur, 0, 8) != substr($time, 0, 8) && strpos($cle,'.') != false ) {
    unset($donnees[$cle]);
  }

}
/* On incrémente ( ajoute +1 ) la valeur du nombre de requêtes. Si l'ip n'est pas encore enregistrée, on incrémente la valeur du nombre de visites et on ajoute l'ip dans le tableau accompagné de la date et de l'heure de l'exécution.*/
if ($donnees['last']!=$last) $donnees['cejour']=0;
$donnees['last']=$last;
$donnees['requetes']++;
$donnees[$hday]++;
$donnees[$jsem]++;
$donnees[$myer]++;
if( !$donnees[$ip] ) {
  $donnees['visites']++;
  $donnees['cejour']++;
  $donnees[$ip] = $time;
}

/* On affiche les résultats du compteur.*/
echo     $donnees['requetes']." hits,"; /* */
echo " ".$donnees['visites']." visites,";
echo " ".$donnees['cejour']." ce jour";  /* */

/* On stocke le tableau dans le fichier de données en écrasant sa valeur précédente.*/
$fp = fopen($fichier,"w");
fwrite($fp, serialize($donnees));
fclose($fp);


?></font></center>

Code php du module stats

<?php
/*
module:	Gestion des statistiques
Copyright Pierre-Yves DUCAS 2010
Les données ini sont dans zite/module/stats.ini
Les données stats sont dans zdata/stats.dta
*/
class Tstats extends Tmodule {
	function dojob() {
		parent::dojob();
		
//==============================================================================		

if (self::$cms->args[0]=='selectmodule') array_shift(self::$cms->args);
if (self::$cms->args[0]=='config') array_shift(self::$cms->args);

$fp = self::$cms->cpath.'/stats.dta';
self::$cms->stats = (array)unserialize(@file_get_contents($fp));
$donnees = & self::$cms->stats;

$out ="";	

if ((isset($_POST['raz_h'])) or (isset($_POST['raz_t']))) {
  for ($i=0;$i<24;$i++) {
    $hday = "H".(($i<10)?"0":"").$i;
    unset($donnees[$hday]);
  }  
}

if ((isset($_POST['raz_d'])) or (isset($_POST['raz_t']))) {
  for ($i=0;$i<8;$i++) {
    $jsem = "S".$i;
    unset($donnees[$jsem]);
  }  
}

if ((isset($_POST['raz_m'])) or (isset($_POST['raz_t']))) {
  for ($i=1;$i<13;$i++) {
    $myer = "M".(($i<10)?"0":"").$i;
    unset($donnees[$myer]);
  }  
}
if ( (isset($_POST['raz_h'])) or (isset($_POST['raz_d'])) or (isset($_POST['raz_m'])) or (isset($_POST['raz_t'])) ) {
  $fpx = fopen($fp,"w");
  fwrite($fpx, serialize($donnees));
  fclose($fpx);
}
$out.=$action;

$out .= "<h1>".$this->get_message('title')."</h1>";


$tot=$max=1;
for ($i=0;$i<24;$i++) { 
  $hday = "H".(($i<10)?"0":"").$i;
  $tot+=$donnees[$hday];
  if ($max<$donnees[$hday]) $max=$donnees[$hday];
}
$out .= "<table border=1 cellspacing=10><tr><td colspan=2>";
$out .= "<h3>".$this->get_message('stats_HH')." ($tot ".$this->get_message('stats_hits').")</h3>";
$out .= "<table border=0 cellpadding=1 cellspacing=0>";
$out .= "<tr align='center'>";
for ($i=0;$i<24;$i++) {
  $hday = "H".(($i<10)?"0":"").$i;
  $don=intval((($donnees[$hday]*100)/$max)+0.5);
  $out .= "<td style='vertical-align:bottom'><img src='./deco/bar.png' width=25 height=$don></td>";
}  
$out .= "<tr align='center'>";
for ($i=0;$i<24;$i++) {
  $hday = "H".(($i<10)?"0":"").$i;
  $don=intval((($donnees[$hday]*100)/$tot)+0.5);
  $out .= "<td>$don%</td>";
}   
$out .= "</tr>";
$out .= "<tr align='center'>";
for ($i=0;$i<24;$i++) $out .= "<td>".(($i<10)?"0":"").$i."</td>";
$out .= "</tr>";

$out .= "</table>";
$out .= "</td></tr><tr><td>";

$tot=$max=1;
for ($i=0;$i<7;$i++) { 
  $jsem = "S".$i;
  $tot+=$donnees[$jsem];
  if ($max<$donnees[$jsem]) $max=$donnees[$jsem];
}
$coef=$max/100;
$out .= "<h3>".$this->get_message('stats_JJ')." ($tot ".$this->get_message('stats_hits').")</h3>";
$out .= "<table border=0 cellpadding=1 cellspacing=0>";
$out .= "<tr align='center'>";
for ($i=1;$i<8;$i++) {
  $jsem = "S".$i;
  if ($jsem=="S8") $jsem="S0";
  $don=intval((($donnees[$jsem]*100)/$max)+0.5);
  $out .= "<td style='vertical-align:bottom'><img src='./deco/bar.png' width=30 height=$don></td>";
}
$out .= "</tr>";
$out .= "<tr align='center'>";
for ($i=1;$i<8;$i++) {
  $jsem = "S".$i;
  if ($jsem=="S8") $jsem="S0";
  $don=intval((($donnees[$jsem]*100)/$tot)+0.5);
  $out .= "<td>$don%</td>";
}  
$out .= "</tr>";
$out .= "<tr align='center'><td>Lun</td><td>Mar</td><td>Mer</td><td>Jeu</td><td>Ven</td><td>Sam</td><td>Dim</td></tr>";
$out .= "</table>";

$out .= "</td><td>";



$tot=$max=1;
for ($i=1;$i<13;$i++) { 
  $myer = "M".(($i<10)?"0":"").$i;
  $tot+=$donnees[$myer];
  if ($max<$donnees[$myer]) $max=$donnees[$myer];
}
$coef=$max/100;
$out .= "<h3>".$this->get_message('stats_MM')." ($tot ".$this->get_message('stats_hits').")</h3>";
$out .= "<table border=0 cellpadding=1 cellspacing=0>";
$out .= "<tr align='center'>";
for ($i=1;$i<13;$i++) {
  $myer = "M".(($i<10)?"0":"").$i;
  $don=intval((($donnees[$myer]*100)/$max)+0.5);
  $out .= "<td style='vertical-align:bottom'><img src='./deco/bar.png' width=30 height=$don></td>";
}  
$out .= "<tr align='center'>";
for ($i=1;$i<13;$i++) {
  $myer = "M".(($i<10)?"0":"").$i;
  $don=intval((($donnees[$myer]*100)/$tot)+0.5);
  $out .= "<td>$don%</td>";
}   
$out .= "</tr>";
$out .= "<tr align='center'><td>Jan</td><td>Fev</td><td>Mar</td><td>Avr</td><td>Mai</td><td>Jun</td><td>Jul</td><td>Aou</td><td>Sep</td><td>Oct</td><td>Nov</td><td>Dec</td></tr>";
$out .= "</table>";
$out .= "</td></tr></table>";
$out .= '<form method="post" action="'.self::$cms->base.implode('|',self::$cms->args).'" enctype="multipart/form-data">';
$out .= '<input type="submit" name="raz_h" value="'.self::$this->get_message('stats_raz_h').'" />';
$out .= '<input type="submit" name="raz_d" value="'.self::$this->get_message('stats_raz_d').'" />';
$out .= '<input type="submit" name="raz_m" value="'.self::$this->get_message('stats_raz_m').'" />';
$out .= '<input type="submit" name="raz_t" value="'.self::$this->get_message('stats_raz_t').'" />';
$out .= '</form>';
return $out;
}
}
?>

... et le fichier ini


lang="FR"
[FR]
admin="Stats"
title="Statistiques ZITE+"
stats_HH="Heure par Heure"
stats_JJ="Jour par Jour"
stats_MM="Mois par Mois"
stats_hits="clics"
stats_raz_h="RAZ stats heures"
stats_raz_d="RAZ stats jour"
stats_raz_m="RAZ stats mois"
stats_raz_t="RAZ stats totale"

Consultant en sécurité informatique (ISO 27001 Lead Auditor, ISO 27005 Risk Manager)
Amateur de JAZZ, Voile, Bridge

Hors ligne

#5 16/09/2010 17:43:23

jpg
Administrateurs
Inscription : 19/11/2008
Messages : 2 084
Site Web

Re : Compteur visites

Super smile,

mais attention pour les utilisateurs Free: les statistiques fichiers (dans un fichier ou une base SQL) sont  rigoureusement prohibées par l'administrateur => il faut passer par sa gestion des statistiques.

Le risque étant la désactivation du compte utilisateur Free s'il le remarque

a+
Jean-Paul

Hors ligne

Pied de page des forums