Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

COMPTEUR DE VISITES DE SITE EN PHP


Information sur la source

Catégorie :Graphique Classé sous : php, compteur, visite, image, gd Niveau : Initié Date de création : 23/03/2006 Date de mise à jour : 24/03/2006 13:51:21 Vu / téléchargé: 24 509 / 2 650

Note :
6 / 10 - par 5 personnes
6,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (19)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
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

  • <?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();
  • }
  • ?>
<?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();
}
?>

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

23 mars 2006 23:47:27 :
ajout de la capture d'écran
24 mars 2006 13:48:23 :
modification du code et ajout d'images
24 mars 2006 13:51:21 :
modidification du code et ajout d'images

Commentaires et avis

signaler à un administrateur
Commentaire de coucou747 le 23/03/2006 22:40:39

# if (imagetypes() & IMG_PNG) {
#     header ("Content-type: image/png");

pourquoi t'as mis une constante si le type est codé en dur ?

tu devrais utiliser des ' à la place des ", ils sont plus rapides...
#
# function createfrom($img){
#     global $ext;
#     switch ($ext){
#         case "gif" :return imagecreatefromgif($img);
#         case "jpg" :return imagecreatefromjpeg($img);
#         case "png" :return imagecreatefrompng($img);
#     }
# }


une variable globale pour ça ??? ouais bof... c'est pas super réutilisable dans ce cas... De plus :
function createfrom($img){
       $a='imagecreatefrom'.$ext;
       return $$a;
}

est plus évolutif...

Sinon, des compteurs on en a plein, le tien n'apporte pas grand chose... à part la partie gd qui est bien pensée...

signaler à un administrateur
Commentaire de jerryyy le 23/03/2006 23:34:21

Salut!

Ton compteur à l'air sympa mais tu pourrais ajouter une image s'il te plaît comme ça je regarde ce que ça donne avant de le prendre ou de le modifier peut-être suivant mes besoins. Merci d'avance

signaler à un administrateur
Commentaire de pat_nat le 23/03/2006 23:35:30

Merci pour le commentaire et comme tu l'as si bien souligné, ce n'est pas ce qui manque, les compteurs.
J'ai effectivement misé sur la gd.

signaler à un administrateur
Commentaire de pat_nat le 24/03/2006 13:56:17

Coucou747, j'ai essayé cela mais cela ne fonctionne pas.

function createfrom($img){
       $a='imagecreatefrom'.$ext;
       return $$a;
}

C'est interpreté comme la varaible $imagecreatefrompng si $ext='png'
C'est du php4 et non pas 5. Est ce du a la version ?
Merci de m'en dire plus? Sympa.

signaler à un administrateur
Commentaire de pat_nat le 24/03/2006 13:58:09

Jerryyy que veux tu exactement, soit plus précis et pas de pb je te fais ca.

signaler à un administrateur
Commentaire de malalam le 24/03/2006 15:34:30 administrateur CS

Hello,

regarde mon exemple de fonction générique de redimensionnement d'images :
http://www.phpcs.com/codes/FONCTION-GENERIQUE-REDIMENSIONNEMENT-IMAGE_36654.aspx

<?php
function imageResize ($fileName, $width, $height) {
    if (!file_exists ($fileName) || !is_numeric ($height) || !is_numeric ($width)) {
        return false;
    } else {
        $aImg = @getimagesize ($fileName);
        if (false === $aImg) {
            return false;
        } else {
            $aTypes = array (1 => 'gif', 2 => 'jpeg', 3 => 'png');
            if (!in_array ($aImg[2], array_keys ($aTypes))) {
                return false;
            } else {
                $getImg = create_function ('$fileName', 'return @imagecreatefrom'.$aTypes[$aImg[2]].'($fileName);');
                $im = $getImg ($fileName);
                $image_p = imagecreatetruecolor($width, $height);
                imagecopyresampled($image_p, $im, 0, 0, 0, 0, $width, $height, $aImg[0], $aImg[1]);
                $saveImg = create_function ('$img, $fileName', 'return @image'.$aTypes[$aImg[2]].'($img, \'thumb_\'.$fileName);');
                if ($saveImg ($image_p, $fileName)) {
                    return true;
                } else {
                    return false;
                }
  
            }
        }
    }
}
imageResize ('isotile2.gif', 25, 25);
?>

signaler à un administrateur
Commentaire de FhX le 24/03/2006 18:57:39

Oui, dans tous les cas faut créer une fonction virtuelle pour ce genre de chose. A partir du moment ou tu veux une fonction dynamique tu n'as pas le choix.

signaler à un administrateur
Commentaire de jerryyy le 25/03/2006 02:33:07

Merci ben c'est exactement ce que je voualais, une image avec un exemple! Merci pour ton script et bonne continuation en php

signaler à un administrateur
Commentaire de youspim le 27/03/2006 16:41:15

Salut PAT_NAT,

Bonne initiative ;-)
Ce que COUCOU747 te disait, a mon avis, c'est d'ecrire comme ceci :
$a='imagecreatefrom.'.$ext;
                   ^
                   |
                c'est ce point qui est important avant l'extension

Voila, j'espere que j'ai été suffisament clair pour ne pas t'embrouiller.
Bon courage.

signaler à un administrateur
Commentaire de youspim le 27/03/2006 16:43:44

Désolé mais ma fléche n'est pas restée au bon endroit :-(

signaler à un administrateur
Commentaire de malalam le 31/03/2006 08:08:26 administrateur CS

Youspim => je pense que tu n'as pas compris ce que proposait Coucou, ton point est en trop ;-)

signaler à un administrateur
Commentaire de pat_nat le 05/04/2006 23:35:19

je vous remercie pour votre aide.
j'ai essayé ca

  $a='imagecreatefrom'.$ext; //avec $ext='GIF' par exemple
  $a('mon_image.gif');

et effectivement ca fonctionne bien.

signaler à un administrateur
Commentaire de coucou747 le 06/04/2006 21:38:54

c'est de ça dont je voulais parler...  c'est carément plus propre...

signaler à un administrateur
Commentaire de malalam le 06/04/2006 23:36:34 administrateur CS

moi je trouve mon create_function plus propre, mais bon... ;-)

signaler à un administrateur
Commentaire de sekkou17 le 23/05/2006 14:04:51

merci c est bien ca marche ; mais j ai un prob avec l' extention .gif cmnt faire pour les ajouter en EsayPHP

signaler à un administrateur
Commentaire de FhX le 23/05/2006 22:00:02

"$a='imagecreatefrom'.$ext; //avec $ext='GIF' par exemple
  $a('mon_image.gif');"

Sauf que ca, c'est moche.
Ta variable $a n'est pas censé être une fonction...
Rahhh PHP quand t'es trop permissif des fois :p :p

signaler à un administrateur
Commentaire de coucou747 le 24/05/2006 16:15:50

FhX... alors tu as quoi comme équivant aux pointeurs sur fonctions qui existent en C ???

personellement, moi je trouve cette méthode plutot pas mal... elle n'a rien d'incorect...

signaler à un administrateur
Commentaire de Fantole le 25/05/2006 13:06:36

Bonjour ;)
Moi j'ai une question (et je précise je n'y connais rien) lol

Serait-il possible d'afficher les GIF animées en animées et non en fixe :? ?

signaler à un administrateur
Commentaire de FhX le 25/05/2006 14:06:10

bah create_function() existe, c'est pas pour rien lol :)

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

compteur rock...config ? [ par pointup ] Bonjour les pros,J'essaie d'installer sur mon site hébergé chez free le script php du compteur de visite + connecté de rock . Vous le connaissez...il Couper le bas d'une image (GD PHP) [ par dezeque ] bonjour,j'aimerai savoir comment faire pour couper le bas d'une image ?elle fais 600X800 et j'aimerai enlver les 50 dernirers pixels du bas pour quell Image GD et php ! prob d'affichage [ par riecola ] Bonjour tout le monde. Voil&#224; mon probl&#232;me : mon utilisateur selectionne une image et un texte au choix dans un formulaire ensuite une page s Problème GD [ par guillaumeoki ] Bonjour,J'ai une image php que j'appelle par image.php?u=.pngEt j'aimerais le changer en image.png je sais que c'est possible mais je ne sais pas comm Première visite sur ce site [ par stephanlish ] Salut à tous,je suis une débutante en php mysql et j'ai des problémes d'insertion des valeurs sélectionnées sur la liste de valeurs du formulaire php. Longueur de caractere dans un textarea [ par DjChat ] Bonjour a tous, j'ai un formulaire avec deux textarea et j'aimerai limiter le nombre de caractere a taper dans ces champ, j'me suis renseigner et c'es PHP- Manipulation de fichiers [ par goth666 ] Bonjour,Voila je me suis mit en tête de creer une sorte de portail, où les visiteurs pourraient laisser des articles...Le problème c'est que je ne veu Antialiasing du texte dans une image [ par Epoc22 ] Bonjour, ça fait longtemps que j'ai plus posté ici tient Alors j'ai un problème avec la librairie GD de PHP. Lorsque je créer un texte avec GD, la pol PHP et les Images [ par Steph115 ] Bonjour,Pour un petit programme en PHP j'ai un "bureau" qui fait 100x100.Les images que les utilisateurs rentrent dans le système sont redimensionnées php et angres [ par olzanoz ] salut tous le monde bah voila j'ai une interface en php avec numéro de compteur comme id quand je tapes le numéro je doit avoir l'état du compteur ave


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,421 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copi