Mesvisiteurs

Soyez le premier à donner votre avis sur cette source.

Vue 9 958 fois - Téléchargée 1 522 fois

Description

Voici un script simple qui permet de connaître les visiteurs de mon site web. Il n'utilise pas de base de données ni aucun cookie. Pour chaque visiteur on enregistre son adresse IP, la date de sa première visite, la date de sa dernière visite et le nombre de ses visites. On fait l'hypothèse que deux adresses IP différentes corespondent à deux visiteurs différents. On décide qu'un autre visiteur venu moins d'une heure avant le visiteur actuel est un visiteur connecté simultanément. Et quand le visiteur fait une nouvelle visite à moins d'une heure après sa dernière visite celle-ci n'est pas comptée comme une viste supplémentaire. Toutes ces suppositions sont arbitraires et quand elles ne sont pas respectées les résulats sont biaisés mais restent utilisables.
Pour installer le logiciel on met dans le dossier de la page d'accueil le contenu du zip ci-joint, sauf bien sûr les fichiers index.html et exemple.html qui servent à montrer comment activer le script visites.php. Les fichiers statistiques.php et visiteurs.php permettent d'afficher les données des visites effectuées.
Ce logiciel convient pour un site web simple et visité modestement.

Source / Exemple :


<?
function getUserIP() {
    if($_SERVER) {
        if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
        elseif(isset($_SERVER['HTTP_CLIENT_IP'])) $ip = $_SERVER['HTTP_CLIENT_IP'];
        else $ip = $_SERVER['REMOTE_ADDR'];
    }
    else {
        if(getenv('HTTP_X_FORWARDED_FOR')) $ip = getenv('HTTP_X_FORWARDED_FOR');
        elseif(getenv('HTTP_CLIENT_IP')) $ip = getenv('HTTP_CLIENT_IP');
        else $ip = getenv('REMOTE_ADDR');
    }
    return ($ip);
}
$now=time();
$dossier="visites";
$visiteur=getUserIP();    // adresse IP du visiteur actuel
$new="oui";
$handle=opendir($dossier);
while ($tmp = readdir($handle)) {
    if($tmp == "$visiteur") {     // si le visiteur actuel est déjà venu 
        $new="non";
        $fichier="$dossier/$visiteur";
        $fp=fopen("$fichier","r");
        $buf = fgets($fp,40);
        fclose($fp);
        list($nb,$vis1,$visz)=explode('|',$buf);
        if(($now-$visz)>3600) { $nb=$nb+1; }  // si c'est une nouvelle visite 
        $fp=fopen("$fichier","w");
        fputs($fp,"$nb|$vis1|$now");          // on met à jour son fichier
        fclose($fp);
    }
}
if($new == "oui") {   // si l'adresse IP du visiteur n'a pas été vue on crée son fichier 
    $nb=1;
    $fichier="$dossier/$visiteur";
    $fp=fopen("$fichier","w");
    fputs($fp,"$nb|$now|$now");
    fclose($fp);
}
$nbs=0;   // nombre de visiteurs actuels connectés "simultanément" ( dans la même heure )
$handle=opendir($dossier);
while ($tmp = readdir($handle)) {
    if($tmp!="." && $tmp!=".." && $tmp!="index.html" && $tmp!="maximum") {
        $fichier="$dossier/$tmp";
        $fp=fopen("$fichier","r");
        $buf = fgets($fp,40);
        fclose($fp);
        list($nb,$vis1,$visz)=explode('|',$buf);
        if(($now-$visz)<3600) { $nbs=$nbs+1; }  // on a trouvé un visiteur de la même heure
    }
}
$fichier="$dossier/maximum";
$fp=fopen("$fichier","r");
$buf = fgets($fp,40);
fclose($fp);
list($nbx,$visx)=explode('|',$buf);  // nbx : nombre maximum de visiteurs "simultanés" 
if($nbs > $nbx) {
    $fp=fopen("$fichier","w");  
    fputs($fp,"$nbs|$now");    // mise à jour du maximum de visiteurs "simultanés"
    fclose($fp);
}
?>

Conclusion :


Le fichier visites.php est commenté. L'installation est très simple. Et pour l'activer il suffit d'ajouter dans le html des pages visitées :
<script language="javascript" src="visites.php"></script>
On peut facilement faire quelques améliorations et/ou variantes.
Vos remarques sont les bienvenues.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
321
Date d'inscription
samedi 18 décembre 2004
Statut
Membre
Dernière intervention
2 septembre 2020
2
Merci à Georges26 et Olafgrossebaffe pour vos commentaires qui sont pris en compte dans la version du 19/05/2012. Et pour ceux qui souhaitent voir la géolocalisation du pays d'origine des visiteurs du site web il suffit d'aller voir : http://www.phpcs.com/code.aspx?ID=54090
Messages postés
7
Date d'inscription
mardi 12 mars 2013
Statut
Membre
Dernière intervention
19 mai 2012

n'ayant pas le code où se trouve le fameux split() je vais avoir un peu de mal a vous trouver une solution

malgès tout, il faut savoir qu'il n'y a jamais une seule façon de faire. la règle serait plutot l'inverse : un algoritme peut etre programmé d'une multitude de façon. la plus grande preuve c'est qu'un "algoritme" ne depend pas d'un langage de programmation et donc a ce titre, on peut le programmer avec toute les forme de lagage existant (bonne chance avec le logo ;)

ce qui me permet de faire un reverse ingenering sur cette affirmation : quand une fonction dans un script est imposé c'est que cette fonction fait enormement de chose pour "coller" a l'agoritme qu'elle cherche a retranscrire

ce que je veus dire par là c'est que cette fameuse fonction split() vous DEVEZ la connaitre par coeur de l'interieur. chercher a la copier avec tel ou tel autre fonction ne fera que géner des erreur de parametre par ci par là dans votre algo

bref : l'affirmation "la fonction qui remplace split qui est : preg_split" est fausse car tu peux utiliser aussi la fonction explode() en fonction du script, mais de toute façon il y a des nuances entre split(), explode() et preg_split() et de toute façon ELLE NE FONT PAS EXACTEMENT LA MEME CHOSE, ce qui explique qu'il faille connaitre exactement leur fonctionnement pour prevoir les modifictation du script pour avoir un fonctionement qui colle à l'algo

et c'est là que je veux en venir : changer de fonction dans un script implique un remaniment profond de ce script pour qu'il continu de fonctionner comme avant

il te faudra donc te plonger dans le fonctionnement de split() et de la façon dont elle est utilisé dans ton script pour esperer pouvoir adapter ton code. car c'est bien ça le probleme il te faudra comprendre intergallement une fonction qui n'existe plus pour esperer pouvoir faire fonctionner ton code en n'utilisant plus cette fonction que tu aura maitrisé

ça semble etre du travail "pour rien" mais en fait c'est un peu ça la programmation...

ps: méssage subliminale : en fonction de ton utlisation tu dois surement utiliser un preg_split() suivit d'un explode() et pense qu'un antislash devant le slash ça peu te décoincer... je dis ça, je dis rien...
Messages postés
6
Date d'inscription
samedi 5 mai 2007
Statut
Membre
Dernière intervention
11 mai 2012

Bonjour olafgrossebaffe

Merci pour cette info que j'avais déjà !! ;-)
Le hic est que je ne suis pas l'auteur de ce script !
et la fonction qui remplace split qui est : preg_split me renvoi elle aussi des erreurs
PHP Warning: preg_split()Delimiter must not be alphanumeric or backslash in visites.php on line 28, 50 et 58
Et je n'ai pas encore trouvé comme faire la modif !

Si t'a la solution je suis preneur :)
Messages postés
7
Date d'inscription
mardi 12 mars 2013
Statut
Membre
Dernière intervention
19 mai 2012

Pour "georges26" :

la fonction split() est OBSOLETE depuis PHP 5.3.0, il ne faut plus l'utiliser car dans les prochaine version de php elle sera supprimé

à toi de réécrire ton scipt en te passant de cette vieille fonction
Messages postés
6
Date d'inscription
samedi 5 mai 2007
Statut
Membre
Dernière intervention
11 mai 2012

RE

j'ai trouvé la parade pour les 2 première erreurs !!
Il faut rajouter isset :

Le résultat

<?php
function getUserIP() {
if($_SERVER) {
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
elseif(isset($_SERVER['HTTP_CLIENT_IP'])) $ip = $_SERVER['HTTP_CLIENT_IP'];
else $ip = $_SERVER['REMOTE_ADDR'];
}
else {
if(getenv('HTTP_X_FORWARDED_FOR')) $ip = getenv('HTTP_X_FORWARDED_FOR');
elseif(getenv('HTTP_CLIENT_IP')) $ip = getenv('HTTP_CLIENT_IP');
else $ip = getenv('REMOTE_ADDR');
}
return ($ip);
}

reste les PHP Deprecated: Function split() !!!
Afficher les 29 commentaires

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.