Compteurs simple/ip/cookies

Description

Voilà un exemple simple de 3 compteurs de visites ayant des fonctionnements differents, l'installation se fait très simplement, le fonctionnement étant basé sur les fichiers...Il doit surement y avoir des maladresses ou choses inutiles dans mon code...je vous laisse donner votre avis.
Le script crée un fichier pour les visites de la journée et stocke les autres journées dans un autre, il y a donc deux fichiers texte par compteurs.

Source / Exemple :


//compteur IP
<?php
function get_ip(){ 
	if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){ 
		$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
	} else if(isset($_SERVER['HTTP_CLIENT_IP'])){ 
		$ip = $_SERVER['HTTP_CLIENT_IP'];
	} else{ 
		$ip = $_SERVER['REMOTE_ADDR'];
		} 
	return $ip;
}

$ip = get_ip();
$fileip="compteur.txt";
$filebi="compteurtot.txt";

function visittoday(){
	global $fileip, $filebi, $ip;
	$fe=0;
	if(file_exists($fileip)){
		$fe=1;
		}
	$i=0;
	if($fe==1){
	$fp=fopen($fileip,"r") or die("Impossible d'ouvrir ou creer le compteur");
	$datef=intval(fgets($fp));
	if(($datef<(time()))&&(date("d",$datef)!=date("d",time()))){
		$ipconnu=Array();
		while (!feof($fp)) {
	      $ipconnu[$i] = fgets($fp);
		  $i++;
	      }
		$fpb=fopen($filebi,"a+") or die("Impossible de créer/ouvrir le fichier global");
		fputs($fpb,"\n".$datef."|".sizeof($ipconnu));
		fclose($fpb);
		fclose($fp);
		$fp=fopen($fileip,"w");
		fputs($fp,time());
		fputs($fp,"\n".$ip);
		fclose($fp);
		return 1;
		}else{
		$ipconnu=Array();
		while (!feof($fp)) {
	      $ipconnu[$i] = trim(fgets($fp));
		  $i++;
	      }
		fclose($fp);
		$fp=fopen($fileip,"a");
		if(!in_array ($ip, $ipconnu)){
			fputs($fp,"\n".$ip) or die("Impossible d'écrire dans le fichier");
			$ipconnu[$i]=$ip;
			}
			return sizeof($ipconnu);
		}
	}else{
		$fp=fopen($fileip,"w");
		fputs($fp,time());
		fputs($fp,"\n".$ip);
		return 1;
		fclose($fp);
	}
}
function totvisit(){
	global $filebi;
	if(file_exists($filebi)){
	$fp=fopen($filebi,"r");
	}else{
	$fp=fopen($filebi,"w");
	}
	$tot=0;
	while (!feof($fp)) {
		$li=fgets($fp);
	    $lineip = explode("|",$li);
		if(sizeof($lineip)==2){
		$tot+=$lineip[1];
		}
      }
	 fclose($fp);
	 $tot+=visittoday();
	 return $tot;
	}
totvisit();
?>

//compteur Simple
<?php

$fileip="scompteur.txt";
$filebi="scompteurtot.txt";

function visittoday(){
	global $fileip, $filebi, $ip;
	$fe=0;
	if(file_exists($fileip)){
		$fe=1;
		}
	$i=0;
	if($fe==1){
	$fp=fopen($fileip,"r") or die("Impossible d'ouvrir ou creer le compteur");
	$datef=intval(fgets($fp));
	if(($datef<(time()))&&(date("d",$datef)!=date("d",time()))){
		$n = fgets($fp);
		$fpb=fopen($filebi,"a+") or die("Impossible de créer/ouvrir le fichier global");
		fputs($fpb,$datef."|".$n."\n");
		fclose($fpb);
		fclose($fp);
		$fp=fopen($fileip,"w");
		fputs($fp,time());
		fputs($fp,"\n1");
		fclose($fp);
		return 1;
		}else{
		$n=intval(fgets($fp));
		$n++;
		fclose($fp);
		$fp=fopen($fileip,"w");
		fputs($fp,$datef."\n") or die("Impossible d'écrire dans le fichier");
		fputs($fp,$n);
		return $n;
		}
	}else{
		$fp=fopen($fileip,"w");
		fputs($fp,time());
		fputs($fp,"\n1");
		return 1;
		fclose($fp);
	}
}
function totvisit(){
	global $filebi;
	if(file_exists($filebi)){
	$fp=fopen($filebi,"r");
	}else{
	$fp=fopen($filebi,"w");
	}
	$tot=0;
	while (!feof($fp)) {
		$li=fgets($fp);
	    $lineip = explode("|",$li);
		if(sizeof($lineip)==2){
		$tot+=$lineip[1];
		}
      }
	 fclose($fp);
	 $tot+=visittoday();
	 return $tot;
	}
totvisit();
?>

//Compteur cookies
<?php

$fileip="ccompteur.txt";
$filebi="ccompteurtot.txt";

function visittoday(){
	global $fileip, $filebi, $ip;
	$fe=0;
	if(file_exists($fileip)){
		$fe=1;
		}
	$i=0;
	if($fe==1){
	$fp=fopen($fileip,"r") or die("Impossible d'ouvrir ou creer le compteur");
	$datef=intval(fgets($fp));
	if(($datef<(time()))&&(date("d",$datef)!=date("d",time()))){
		$n = fgets($fp);
		$fpb=fopen($filebi,"a+") or die("Impossible de créer/ouvrir le fichier global");
		fputs($fpb,$datef."|".$n."\n");
		fclose($fpb);
		fclose($fp);
		$fp=fopen($fileip,"w");
		fputs($fp,time());
		fputs($fp,"\n1");
		setcookie("visit", "1",mktime(0,0,0,intval(date("d")),intval(date("m")),intval(date("Y")))+24*3600);
		fclose($fp);
		return 1;
		}else{
		$n=intval(fgets($fp));
		if(!isset($_COOKIE['visit'])){
			$n++;
			setcookie("visit", "1",mktime(0,0,0,intval(date("d")),intval(date("m")),intval(date("Y")))+24*3600);
		}	
		fclose($fp);
		$fp=fopen($fileip,"w");
		fputs($fp,$datef."\n") or die("Impossible d'écrire dans le fichier");
		fputs($fp,$n);
		return $n;
		}
	}else{
		$fp=fopen($fileip,"w");
		fputs($fp,time());
		fputs($fp,"\n1");
		setcookie("visit", "1",mktime(0,0,0,intval(date("d")),intval(date("m")),intval(date("Y")))+24*3600);
		return 1;
		fclose($fp);
	}
}
function totvisit(){
	global $filebi;
	if(file_exists($filebi)){
	$fp=fopen($filebi,"r");
	}else{
	$fp=fopen($filebi,"w");
	}
	$tot=0;
	while (!feof($fp)) {
		$li=fgets($fp);
	    $lineip = explode("|",$li);
		if(sizeof($lineip)==2){
		$tot+=$lineip[1];
		}
      }
	 fclose($fp);
	 $tot+=visittoday();
	 return $tot;
	}
totvisit();
?>

//Affichage des stats
<?php
$fip="../compteur.txt";
$ftotip="../compteurtot.txt";
$fs="../scompteur.txt";
$ftots="../scompteurtot.txt";
$fc="../ccompteur.txt";
$ftotc="../ccompteurtot.txt";

function visittoday($type){
	global $fip, $fs, $fc;
	switch($type) {
		case 'ip':
			$fp=fopen($fip,"r") or die("Impossible d'ouvrir le compteur");
			$ipconnu=Array();
			while (!feof($fp)) {
				$ipconnu[$i] = trim(fgets($fp));
				$i++;
			}
			return sizeof($ipconnu)-1;
			fclose($fp);
		break;
		case 's':
			$fp=fopen($fs,"r") or die("Impossible d'ouvrir le compteur");
			$datef=intval(fgets($fp));
			return intval(trim(fgets($fp)));
			fclose($fp);
		break;
		case 'c':
			$fp=fopen($fc,"r") or die("Impossible d'ouvrir le compteur");
			$datef=intval(fgets($fp));
			return intval(trim(fgets($fp)));
			fclose($fp);
		break;
	}
}
function visitjour($type){
	global $ftotip, $ftots, $ftotc;
	switch($type) {
		case 'ip':
			$fp=fopen($ftotip,"r") or die("Impossible d'ouvrir le compteur");
			$tot=0;
			$i=0;
			$lineip=Array();
			while (!feof($fp)) {
				$li=fgets($fp);
				
			    $lineip[$i] = explode("|",$li);
				if(sizeof($lineip[$i])==2){
					$tot+=$lineip[$i][1];
				}
				$i++;
		      }
			for($j=0;$j<$i;$j++){
				if(sizeof($lineip[$j])==2){
				echo date("d-m-Y :",intval($lineip[$j][0]))." ".$lineip[$j][1]." visites <br>";
				}
			}
			$today=visittoday("ip");
			$tot+=$today;
			echo "<b>Aujourd'hui :</b> ".$today." visites ";
			echo "<b>Total :</b> ".$tot;
			fclose($fp);
		break;
		case 's':
			$fp=fopen($ftots,"r") or die("Impossible d'ouvrir le compteur");
			$tot=0;
			$i=0;
			$lineip=Array();
			while (!feof($fp)) {
				$li=fgets($fp);
				
			    $lineip[$i] = explode("|",$li);
				if(sizeof($lineip[$i])==2){
					$tot+=$lineip[$i][1];
				}
				$i++;
		      }
			for($j=0;$j<$i;$j++){
				if(sizeof($lineip[$j])==2){
				echo date("d-m-Y :",intval($lineip[$j][0]))." ".$lineip[$j][1]." visites <br>";
				}
			}
			$today=visittoday("s");
			$tot+=$today;
			echo "<b>Aujourd'hui :</b> ".$today." visites ";
			echo "<b>Total :</b> ".$tot;
			fclose($fp);
		break;
		case 'c':
			$fp=fopen($ftotc,"r") or die("Impossible d'ouvrir le compteur");
			$tot=0;
			$i=0;
			$lineip=Array();
			while (!feof($fp)) {
				$li=fgets($fp);
				
			    $lineip[$i] = explode("|",$li);
				if(sizeof($lineip[$i])==2){
					$tot+=$lineip[$i][1];
				}
				$i++;
		      }
			for($j=0;$j<$i;$j++){
				if(sizeof($lineip[$j])==2){
				echo date("d-m-Y :",intval($lineip[$j][0]))." ".$lineip[$j][1]." visites <br>";
				}
			}
			$today=visittoday("c");
			$tot+=$today;
			echo "<b>Aujourd'hui :</b> ".$today." visites ";
			echo "<b>Total :</b> ".$tot;
			fclose($fp);
		break;
	}
}
echo "<h2>IP :</h2><br>";
visitjour('ip');
echo "<br>";
echo "<h2>Simple :</h2><br>";
visitjour('s');
echo "<br>";
echo "<h2>Cook :</h2><br>";
visitjour('c');
echo "<br>";
?>

Conclusion :


Pour faire fonctionner les compteurs faites simplement un include des fichiers compteur.php (ip) scompteur.php (compteur simple) ccompteur.php (compteur cookie) dans votre code, pour afficher le nombre de gens total passés dessus remplacez le dernier appel totvisit() par echo totvisit();.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.