Compteur de visites de site en php

Description

Compteur sur 5 chiffres représenté par 5 images.
Le zip contient le fichier compteur.htm qui présente le compteur (A voir ), le script compteur.php qui dessine le compteur à partir des images représentant les chiffres 0 à 9. Ces 10 images sont elles aussi fournies.
Le compteur ne s'incrémente qu'au premier chargement de la page ou celui-ci se trouve (utilisation de variable de session).
Il est nécessaire que la librairie php GD soit chargée pour que ce script fonctionne .
Pour cela vous disposez aussi du script gd.php qui vérifie si gd est présente et quels sont les types d'images supportés par votre version.
Le script est commenté afin de pouvoir etre bien compris, voir modifié ou optimisé.

Source / Exemple :


<?php
session_start();
//////////////////////////////////////////////////////
////////////	Paramètres à modifier selon besoin
//////////////////////////////////////////////////////
//chemin et nom du fichier texte dans lequel se trouve 
//une seule ligne contenant le nomvre de visites 
$fichier="./compteur.txt"; 	
// chemin ou se trouve les 10 images représentant les chiffres 0 à 9
// et nom de la premiere image ce qui va permettre
// de recupérer l'extension de l'image
// type d'image autorisé dans ce script: png, jpg ou gif
$img="./jpg/im0.jpg";
//$img="./png/0.jpg";	exemple avec png
//$img="./gif/im0.gif";	exemple avec gif

// Le script gd.php permet de vérifier que l'extension gd 
// est bien présente et les types d'images supportés
//////////////////////////////////////////////////////

//////////////////////////////////////////////////////
////////////	Code réalisation du compteur
//////////////////////////////////////////////////////
if (imagetypes() & IMG_PNG) { // on dessine du png quelque soit le type des images (png, jpg ou gif) 
    header ("Content-type: image/png");
	
	if (isset($_SESSION["nb"])) $nb=$_SESSION["nb"] ;
	else {	
		/////////////// Ouverture fichier texte contenant le compteur, lecture, incrementation, ecriture
		if (file_exists($fichier)) {//le fichier existe
		 if (is_writable($fichier)) $mode="r+"; //et le fichier est accessible en ecriture
	 	else  noimage("Compteur indisponible"); //en lecture seule donc affichage erreur
		}
		else $mode="w+"; //le fichier n'existe pas, il va etre créé
		$fic=fopen($fichier,$mode); //ouverture du fichier
		if (!$fic) noimage("Compteur indisponible");  //probleme lors de l'ouverture et  affichage erreur
		
		$nb =  fgets($fic); //recupere la seule ligne du fichier devant contenir le nombre de visites
		if ($nb=="") $nb=0;		$nb++; //si ligne vide alors nombre =1 sinon on incremente
		rewind ($fic); //on se replace en debut de fichier
		fputs($fic,$nb); //on ecrit le nombre de visites
		fclose($fic);//fermeture du fichier
		$_SESSION["nb"]=$nb;
	}	
//complete a gauche par des zéro si le nombre a moins de 5 chiffres
//afin d'avoir un compteur sur  5 chiffres
	$ligne=str_pad($nb,5, "0", STR_PAD_LEFT);	
// extension des images represenatnt les chiffres de 0 à 9
	$ext=substr($img, strrpos($img,".")); 	
	$fic=substr($img,0, strrpos($img,".")-1); 	

	for($i=0;$i<10;$i++) {	//si une image est manquante affichage sous forme de texte
		if (!file_exists($fic.$i.$ext)) noimage($ligne);
		//pour chaque image on recupere sa largeur, sa hauteur, ...
		list(${"w$i"},${"h$i"},${"typ$i"},${"attrib$i"}) = getimagesize($fic.$i.$ext);
	}
		
	$wtot=0;	//calcul de la largeur du compteur en fonction des images qui le forment
	for($i=0;$i<strlen($ligne);$i++) $wtot += ${"w".$ligne[$i]};
	
	$imdest = imagecreatetruecolor  ($wtot,$h0); //creation d'une image vide de la longueur des 5 images
	
	///////////////////////////////////	couleur de fond	////////////////////////	
	//pas necessiare mais je laisse le code en exemple
	/*$imsource = createfrom($fic."1".$ext,$ext,$ligne);	//chargement de l'image im1.gif  
	if (! $imsource) noimage($ligne); //probleme donc affichage sous forme de texte
	//recupéréation de la couleur du pixel en haut  a gauche senssé etre couleur de fond
	$rgb = imagecolorsforindex($imsource,imagecolorat($imsource, 0, 0)) ;
	//mettre cette meme couleur de fond dans la nouvelle image
	$bgc = imagecolorallocate ($imdest, $rgb["red"], $rgb["green"], $rgb["blue"]);
	imagefill ($imdest, 0, 0, $bgc);

  • /////////////////////////////////
//////////////// realisation de l'image compteur ///////////// $pos=0; for($i=0;$i<strlen($ligne);$i++) { //copy de l'image representant chacun des 5 chiffres du compteur $imsource = createfrom($fic.$ligne[$i].$ext,$ext,$ligne); if (!$imsource) noimage($ligne); //probleme donc affichage sous forme de texte imagecopymerge ( $imdest ,$imsource ,$pos, 0, 0, 0,${"w".$ligne[$i]}, ${"h".$ligne[$i]}, 100); $pos +=${"w".$ligne[$i]}; } imagepng($imdest) ; //affichage du compteur sous frome d'une image png } function createfrom($img,$ext,$ligne){ switch ($ext){ case ".gif" :return imagecreatefromgif($img); case ".jpg" :return imagecreatefromjpeg($img); case ".png" :return imagecreatefrompng($img); default: noimage($ligne); } } function noimage($txt){ $font=2; //ecriture du texte $txt dans l'image $imdest $imdest = imagecreatetruecolor (10+strlen($txt)* imagefontwidth($font) ,5+imagefontheight($font) ); $bgc = imagecolorallocate ($imdest, 255, 255, 255); $tc = imagecolorallocate ($imdest, 0, 0, 0); imagefilledrectangle ($imdest, 0, 0, 150, 30, $bgc); imagestring ($imdest, $font, 5, 5, $txt, $tc); imagepng($imdest) ; die(); } ?>

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.