Accueil > > > [PHP5] LIVE COUNTER || QUI EST EN LIGNE
[PHP5] LIVE COUNTER || QUI EST EN LIGNE
Information sur la source
Description
Je fournis juste la source pour le faire avec l'exemple en bas de cette dernière. C'est une source faite rapidement pour des besoins personnels et n'ayant rien trouvé qui me plaisait, je la pose ici en espérant qu'elle puisse en aider certains d'entre vous. N'oubliez pas de créer les 2 fichiers de log !!! (la config utilisé dans l'exemple est dans un dossier common 1 niveau au dessus de la classe et devra s'appeller "common") Les fonctionnalités sont : _Log des ip connecté avec timestamp du dernier refresh (sans blague ;) ) (le timestamp est réglé sur 300 a vous de voir la config qui vous correspond!) _Filtrage des bots _Log des bot (pour espionner quel bot espionne votre site :D ) _On pourrait ajouter facilement le User Agent histoire de ^^ Voilà
Source
- <?php
-
- class LiveCounter{
-
- private $m_sFileIp;
- private $m_sFileBot;
- private $m_aisIp=array();
- private $m_sUserAgent;
-
- private $m_assPossibleBotIp=array(
- 'Google'=>'66.249',
- 'Msn1'=>'207.68.146',
- 'Msn2'=>'65.54.188',
- 'Yahoo1'=>'66.196',
- 'Yahoo2'=>'68.142',
- 'Voila'=>'195.101.94',
- 'WiseNut1'=>'64.241.243.65',
- 'WiseNut2'=>'209.249.67',
- 'WiseNut3'=>'64.241.242.177',
- 'Fast'=>'66.77.73',
- 'Teoma1'=>'65.214.36',
- 'Teoma'=>'65.214.38.10'
- );
-
- const TIME_MAX=300;
- const FILTER_BOT=true;
- const LOG_BOT=true;
-
- public function __construct($sFileIp,$sFileBot,$sIp='',$sUserAgent=''){
- if(file_exists($sFileIp)){
- $this->m_sFileIp=$sFileIp;
- }
- if(file_exists($sFileBot)){
- $this->m_sFileBot=$sFileBot;
- }
- if($sIp!==''){
- $this->m_aisIp=explode('.',$sIp);
- }
- if($sUserAgent!==''){
- $this->m_sUserAgent=$sUserAgent;
- }
- }
-
- public function __destruct(){
-
- }
-
- public function update(){
- $aisLine=$this->getConnected();
- if(!empty($aisLine)){
- $iVisiteur=count($aisLine);
- }
- $iTime=time();
- if(!empty($aisLine)){
- $aisFileResult=array();
- $bFind=false;
- foreach($aisLine as $iLine=>$sLine){
- $aisLineExploded=explode('.',$sLine);
- //update myself
- if(!empty($this->m_aisIp)){
- if($aisLineExploded[0]===$this->m_aisIp[0] && $aisLineExploded[1]===$this->m_aisIp[1] && $aisLineExploded[2]===$this->m_aisIp[2] && $aisLineExploded[3]===$this->m_aisIp[3]){
- if(self::FILTER_BOT===true && true===$this->filterBot()){
- //$aisFileResult[]=$this->addIp($this->m_aisIp,$iTime);
- }
- else{
- $aisFileResult[]=$this->addIp($this->m_aisIp,$iTime);
- }
- $bFind=true;
- }
- else{
- $aisFileResult[]=$this->updateLine($aisLineExploded,$iTime);
- }
- }
- else{
- $aisFileResult[]=$this->updateLine($aisLineExploded,$iTime);
- }
- }
- if(!$bFind){
- if(!empty($this->m_aisIp)){
- if(self::FILTER_BOT===true && true===$this->filterBot()){
- //$aisFileResult[]=$this->addIp($this->m_aisIp,$iTime);
- }
- else{
- $aisFileResult[]=$this->addIp($this->m_aisIp,$iTime);
- }
- }
- }
- }
- else{
- if(!empty($this->m_aisIp)){
- if(self::FILTER_BOT===true && true===$this->filterBot()){
- //$aisFileResult[]=$this->addIp($this->m_aisIp,$iTime);
- }
- else{
- $aisFileResult[]=$this->addIp($this->m_aisIp,$iTime);
- }
- }
- }
- $this->logIps($aisFileResult);
- }
-
- private function updateLine($aisLineExploded,$iTime){
- //update others ip
- $sResult='';
- if(!empty($this->m_aisIp)){
- if($aisLineExploded[0]!==$this->m_aisIp[0] || $aisLineExploded[1]!==$this->m_aisIp[1] || $aisLineExploded[2]!==$this->m_aisIp[2] || $aisLineExploded[3]!==$this->m_aisIp[3]){
- if($aisLineExploded[4]>$iTime-self::TIME_MAX){
- $sResult=$this->addIp($aisLineExploded,$aisLineExploded[4]);
- }
- }
- }
- else{
- if($aisLineExploded[4]>$iTime-self::TIME_MAX){
- $sResult=$this->addIp($aisLineExploded,$aisLineExploded[4]);
- }
- }
- return $sResult;
- }
-
- private function addIp($aisIp,$iTime){
- return $aisIp[0].'.'.$aisIp[1].'.'.$aisIp[2].'.'.$aisIp[3].'.'.$iTime;
- }
-
- private function filterBot(){
- $bIsPosibleBot=false;
- if(!empty($this->m_aisIp)){
- foreach($this->m_assPossibleBotIp as $sBot =>$sIp){
- $aiiBotIp=explode('.',$sIp);
- $iIpParts=count($aiiBotIp);
- $bIpIntegrity=true;
- for($iCurrentIpPart=0;$iCurrentIpPart<$iIpParts;$iCurrentIpPart++){
- if($bIpIntegrity===true && $aiiBotIp[$iCurrentIpPart]==$this->m_aisIp[$iCurrentIpPart]){
- //always is a possible bot
- }
- else{
- $bIpIntegrity=false;
- //a while will be better to exit for
- $iCurrentIpPart=$iIpParts;
- }
- }
- if($bIpIntegrity===true){
- $bIsPosibleBot=true;
- if(true===self::LOG_BOT){
- $this->logBot($sBot);
- }
- }
- }
- }
- return $bIsPosibleBot;
- }
-
- private function logBot($mBotName){
- if(null!==$this->m_sFileBot){
- if(is_resource($rFile=fopen($this->m_sFileBot,'a'))){
- if(flock($rFile,LOCK_EX)){
- fwrite($rFile,$mBotName.' : '.implode('.',$this->m_aisIp).' : '.$this->m_sUserAgent."\n");
- }
- fclose($rFile);
- }
- }
- }
-
- private function logIps($aisFileResult){
- if(!empty($aisFileResult)){
- $sFileContent=implode("\n",$aisFileResult);
- if(is_resource($rFile=fopen($this->m_sFileIp,'w'))){
- if(flock($rFile,LOCK_EX)){
- fwrite($rFile,$sFileContent);
- }
- fclose($rFile);
- }
- }
- }
-
- public function getConnected(){
- $aisConnected=array();
- if(file_exists($this->m_sFileIp)){
- $aisLine=file($this->m_sFileIp);
- if(!empty($aisLine)){
- foreach($aisLine as $sLine){
- //fucking \n which hide and fout le bordel >_<
- $sLine=str_replace("\n",'',$sLine);
- $aisConnected[]=$sLine;
- }
- }
- }
- return $aisConnected;
- }
-
- }
- /*
- $oLiveCounter=new LiveCounter('../common/count.txt','../common/logbot.txt','64.241.242.177','');
- $oLiveCounter->update();
-
- $oLiveCounter=new LiveCounter('../common/count.txt','../common/logbot.txt','65.214.38.10','');
- $oLiveCounter->update();
-
- $oLiveCounter=new LiveCounter('../common/count.txt','../common/logbot.txt','127.0.0.1','');
- $oLiveCounter->update();
-
- $oLiveCounter=new LiveCounter('../common/count.txt','../common/logbot.txt','192.168.0.0','');
- $oLiveCounter->update();
-
- $oLiveCounter=new LiveCounter('../common/count.txt','../common/logbot.txt','192.168.0.1','');
- $oLiveCounter->update();
-
- $oLiveCounter=new LiveCounter('../common/count.txt','../common/logbot.txt','66.249.22.1','');
- $oLiveCounter->update();
- */
- ?>
<?php
class LiveCounter{
private $m_sFileIp;
private $m_sFileBot;
private $m_aisIp=array();
private $m_sUserAgent;
private $m_assPossibleBotIp=array(
'Google'=>'66.249',
'Msn1'=>'207.68.146',
'Msn2'=>'65.54.188',
'Yahoo1'=>'66.196',
'Yahoo2'=>'68.142',
'Voila'=>'195.101.94',
'WiseNut1'=>'64.241.243.65',
'WiseNut2'=>'209.249.67',
'WiseNut3'=>'64.241.242.177',
'Fast'=>'66.77.73',
'Teoma1'=>'65.214.36',
'Teoma'=>'65.214.38.10'
);
const TIME_MAX=300;
const FILTER_BOT=true;
const LOG_BOT=true;
public function __construct($sFileIp,$sFileBot,$sIp='',$sUserAgent=''){
if(file_exists($sFileIp)){
$this->m_sFileIp=$sFileIp;
}
if(file_exists($sFileBot)){
$this->m_sFileBot=$sFileBot;
}
if($sIp!==''){
$this->m_aisIp=explode('.',$sIp);
}
if($sUserAgent!==''){
$this->m_sUserAgent=$sUserAgent;
}
}
public function __destruct(){
}
public function update(){
$aisLine=$this->getConnected();
if(!empty($aisLine)){
$iVisiteur=count($aisLine);
}
$iTime=time();
if(!empty($aisLine)){
$aisFileResult=array();
$bFind=false;
foreach($aisLine as $iLine=>$sLine){
$aisLineExploded=explode('.',$sLine);
//update myself
if(!empty($this->m_aisIp)){
if($aisLineExploded[0]===$this->m_aisIp[0] && $aisLineExploded[1]===$this->m_aisIp[1] && $aisLineExploded[2]===$this->m_aisIp[2] && $aisLineExploded[3]===$this->m_aisIp[3]){
if(self::FILTER_BOT===true && true===$this->filterBot()){
//$aisFileResult[]=$this->addIp($this->m_aisIp,$iTime);
}
else{
$aisFileResult[]=$this->addIp($this->m_aisIp,$iTime);
}
$bFind=true;
}
else{
$aisFileResult[]=$this->updateLine($aisLineExploded,$iTime);
}
}
else{
$aisFileResult[]=$this->updateLine($aisLineExploded,$iTime);
}
}
if(!$bFind){
if(!empty($this->m_aisIp)){
if(self::FILTER_BOT===true && true===$this->filterBot()){
//$aisFileResult[]=$this->addIp($this->m_aisIp,$iTime);
}
else{
$aisFileResult[]=$this->addIp($this->m_aisIp,$iTime);
}
}
}
}
else{
if(!empty($this->m_aisIp)){
if(self::FILTER_BOT===true && true===$this->filterBot()){
//$aisFileResult[]=$this->addIp($this->m_aisIp,$iTime);
}
else{
$aisFileResult[]=$this->addIp($this->m_aisIp,$iTime);
}
}
}
$this->logIps($aisFileResult);
}
private function updateLine($aisLineExploded,$iTime){
//update others ip
$sResult='';
if(!empty($this->m_aisIp)){
if($aisLineExploded[0]!==$this->m_aisIp[0] || $aisLineExploded[1]!==$this->m_aisIp[1] || $aisLineExploded[2]!==$this->m_aisIp[2] || $aisLineExploded[3]!==$this->m_aisIp[3]){
if($aisLineExploded[4]>$iTime-self::TIME_MAX){
$sResult=$this->addIp($aisLineExploded,$aisLineExploded[4]);
}
}
}
else{
if($aisLineExploded[4]>$iTime-self::TIME_MAX){
$sResult=$this->addIp($aisLineExploded,$aisLineExploded[4]);
}
}
return $sResult;
}
private function addIp($aisIp,$iTime){
return $aisIp[0].'.'.$aisIp[1].'.'.$aisIp[2].'.'.$aisIp[3].'.'.$iTime;
}
private function filterBot(){
$bIsPosibleBot=false;
if(!empty($this->m_aisIp)){
foreach($this->m_assPossibleBotIp as $sBot =>$sIp){
$aiiBotIp=explode('.',$sIp);
$iIpParts=count($aiiBotIp);
$bIpIntegrity=true;
for($iCurrentIpPart=0;$iCurrentIpPart<$iIpParts;$iCurrentIpPart++){
if($bIpIntegrity===true && $aiiBotIp[$iCurrentIpPart]==$this->m_aisIp[$iCurrentIpPart]){
//always is a possible bot
}
else{
$bIpIntegrity=false;
//a while will be better to exit for
$iCurrentIpPart=$iIpParts;
}
}
if($bIpIntegrity===true){
$bIsPosibleBot=true;
if(true===self::LOG_BOT){
$this->logBot($sBot);
}
}
}
}
return $bIsPosibleBot;
}
private function logBot($mBotName){
if(null!==$this->m_sFileBot){
if(is_resource($rFile=fopen($this->m_sFileBot,'a'))){
if(flock($rFile,LOCK_EX)){
fwrite($rFile,$mBotName.' : '.implode('.',$this->m_aisIp).' : '.$this->m_sUserAgent."\n");
}
fclose($rFile);
}
}
}
private function logIps($aisFileResult){
if(!empty($aisFileResult)){
$sFileContent=implode("\n",$aisFileResult);
if(is_resource($rFile=fopen($this->m_sFileIp,'w'))){
if(flock($rFile,LOCK_EX)){
fwrite($rFile,$sFileContent);
}
fclose($rFile);
}
}
}
public function getConnected(){
$aisConnected=array();
if(file_exists($this->m_sFileIp)){
$aisLine=file($this->m_sFileIp);
if(!empty($aisLine)){
foreach($aisLine as $sLine){
//fucking \n which hide and fout le bordel >_<
$sLine=str_replace("\n",'',$sLine);
$aisConnected[]=$sLine;
}
}
}
return $aisConnected;
}
}
/*
$oLiveCounter=new LiveCounter('../common/count.txt','../common/logbot.txt','64.241.242.177','');
$oLiveCounter->update();
$oLiveCounter=new LiveCounter('../common/count.txt','../common/logbot.txt','65.214.38.10','');
$oLiveCounter->update();
$oLiveCounter=new LiveCounter('../common/count.txt','../common/logbot.txt','127.0.0.1','');
$oLiveCounter->update();
$oLiveCounter=new LiveCounter('../common/count.txt','../common/logbot.txt','192.168.0.0','');
$oLiveCounter->update();
$oLiveCounter=new LiveCounter('../common/count.txt','../common/logbot.txt','192.168.0.1','');
$oLiveCounter->update();
$oLiveCounter=new LiveCounter('../common/count.txt','../common/logbot.txt','66.249.22.1','');
$oLiveCounter->update();
*/
?>
Historique
- 04 janvier 2009 18:47:41 :
- Ajout d'une méthode plus propre et surtout plus utile pour récuperer les connectés (qui est quand même le but du bouzin ^^)
- 04 janvier 2009 19:14:22 :
- Il manquait un if pour le timestamp pour virer les trop vieux ^^
- 05 janvier 2009 21:16:48 :
- Ajout d'une méthode pour logger l'array d'ip via une méthode pour rendre la classe un poils plus modifiable.
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
erreur 500 aléatoire [ par eax ]
bonjour à tous!j'ai un problème qui est assez curieux et qui semble être lié à ma redirection en .comen effet lorsque je me connecte sur www.bitsenfol
Problème de cookies [ par iomega ]
Bonjour a tousJ'ai deux serveurs les 2 avec eseayphp 1.6 sur le 1er quand je me connecte le cookies dure toute la session jusqu'a la fermeture du brow
differnec entre php 4 et php5 [ par hardelgylls ]
Bonjourpetite question :j'ai passer un oral et l'examinateur m'a demandé quel était la différence entre php4 et php5. et la gros blanc, est ce que qqu
Doc PHP5 sniff sniff [ par slhuilli ]
Bonjour, Bonsoir,Je suis a la recherche d'un PDF qui recenserait les mots-clefs + explications (bref un bouquin complet) sur PHP 5 qui parait-il est
[Session] sous ie [ par petit_stagiaire ]
Bonjour,je gère des sessions pour un accès membre.Lorsqu'un utilisateur se connecte je remplis $SESSION['nom']...Mon problème vient de l'utilisation d
Pb passage PHP4 -> PHP5 [ par Galmiza ]
Salut,J'ai acheté un bouquin pour débuter le PHP.J'ai suivi a la lettre les instructions du livre:-installer EasyPHP 1.7-installer PHP 5.0..-lancer Ea
Cohabitation PHP4 PHP5 sur même serveur ! [ par Zacland ]
Ce n'est pas une question, mais je me doute que certaines personnes veulent essayer de faire cohabiter 2 versions de PHP sur un même serveur Apache...
Un caractére se trouve t'il dans ma chaîne... [ par juki_webmaster ]
Bonsoir,Je travaille depuis 14h cette apres-midi sur une fonction alternative d'une fonction connu et disponible uniquement sur php5, je fait cette fo
PHP5 en PHP3 [ par el shaddai ]
J'ai développé une partie de site en PHP5. MAlheureusement , chargé chez FREE, ils n'utilisent que PHP3. Y a t-il une manip simple pour qur du PHP5 pa
PHP5 et MySQL 4.1.7 [ par TMT ]
J'ai installé PHP5 et MySQL sur mon Windows XP avec IIS. J'ai bien activé le module php_mysql dans le fichier php.ini Là mon problème est qu-à chaque
|
Derniers Blogs
CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT)CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT) par FREMYCOMPANY
Bonjour à tous, Je viens de publier une proposition comprenant 5 pseudo-classes pour le CSS Working Group ayant trait à l'état de chargement d'un élément (ex: IMG,VIDEO,AUDIO,OBJECT pour l'HTML.). Si le c½ur vous en dit, vous pouvez retrouver cette p...
Cliquez pour lire la suite de l'article par FREMYCOMPANY MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ?MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ? par ROMELARD Fabrice
Formation initiale Durant la formation, le découpage classique est le suivant (je donnerai les équivalences Suisse lorsque je les connaîtrais) : Ecole primaire jusqu'au Collège : Formation générale permettant d'obtenir les méthodes...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice Y'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENTY'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENT par Aleks
Quand on a ce genre d'erreur sans log :
Et bas on a juste envie de choper le gas de Microsoft qu'a développé ça et lui foutre des baffes de Coboye ! ...
Cliquez pour lire la suite de l'article par Aleks [HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL[HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL par Pierrick CATRO-BROUILLET
Avec la sortie prochaine de la Beta Consumer Preview de Windows 8, j'avais envie de revenir sur une des fonctionnalités que j'attends le plus et que, en bon geek que je suis, j'utilise déjà : Hyper-V 3 ainsi son module PowerShell.
Il y a déjà pléthor...
Cliquez pour lire la suite de l'article par Pierrick CATRO-BROUILLET IIS7 - COMPRESSION GZIPIIS7 - COMPRESSION GZIP par cyril
La compression GZIP permet d'améliorer les performances de navigation en compressant ce qu'envoie le serveur à un client. Pour comprendre comment cela fonctionne, regardons ce qu'il se passe au niveau HTTP lorsqu'un client tente d'accéder à une ress...
Cliquez pour lire la suite de l'article par cyril
Logiciels
Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning Academy System (17.1.3.0)ACADEMY SYSTEM (17.1.3.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|