Neuigkeiten:

Privates MODX und LINUX BLOG, User Registrierung ist deaktiviert! Fragen oder Tipps? Bitte per Matrix: @jolichter:tchncs.de

Hauptmenü

MODX webCounter

Begonnen von Jo, 2015-10-24 | 14:32:01

« vorheriges - nächstes »

Jo

Einfacher Besucherzähler ohne DB als Snippet

Anstatt einer Session-ID benutze ich eine anonymisierte User IP damit dieser nur einmal pro Tag gezählt wird.
Wer mehr als 100 IP's pro Tag speichern will, sollte das in einer Datenbank tun.
Je Besucherzähler werden 3 Dateien im /assets Verzeichnis von MODX angelegt.

<?php
# Snippet Aufruf z.B.: [[!webCounter? &cname=`web4Count` &startnum=`4440`]]

$numip '20'# Anzahl der IP-Nummern
$numipRIP 24*60*60# IP-Nummern löschen wenn älter als 1 Tag
$startnum $modx->getOption(startnum,$scriptProperties,1);
$get_countname $modx->getOption('cname',$scriptProperties,'webCount');
$countname $modx->config['base_path'].'assets/'.$get_countname.'.txt';
$ipfile $modx->config['base_path'].'assets/'.$get_countname.'_ip.txt';
$datumstart $modx->config['base_path'].'assets/'.$get_countname.'_datumstart.txt';
$userip $_SERVER['REMOTE_ADDR'];

# IP anonymisieren!
$ipsplit explode("."$userip);
$userip "$ipsplit[0].$ipsplit[1].$ipsplit[2].0";

if(!
file_exists($datumstart)){
    
$fo fopen($datumstart,'w+');
    
fputs($fotime());
    
fclose($fo);
}
if(!
file_exists($countname)){
    
$fo fopen($countname,'w+');
    
fputs($fo$startnum);
    
fclose($fo);
}
if(!
file_exists($ipfile)){
    
$foip fopen($ipfile'w+');
    
fputs($foip$userip.':');
    
fclose($foip);
}

# wenn äter als $numipRIP dann löschen
if(file_exists($datumstart)){
   
$fodatum fopen($datumstart,'r');
   
$datum1 fgets($fodatum11);
   
fclose($fodatum);
}

$datum2 $datum1 $numipRIP;
$datumheute time();

  if(
$datumheute $datum2) {
     
unlink($datumstart);
     if(!
file_exists($datumstart)){
         
$fo fopen($datumstart,'w+');
         
fputs($fotime());
         
fclose($fo);
     }
     
unlink($ipfile);
     if(!
file_exists($ipfile)){
         
$foip fopen($ipfile'w+');
         
# fputs($foip, $userip.':');
         
fclose($foip);
     }
  }

$ipcont fopen($ipfile,'r+');
$ipfile1 fgets($ipcont,2048);
$ipdata explode(':',$ipfile1);

if(
in_array($userip$ipdata)){
    
$anzahl fopen($countname,'r+');
       
$nummer fgets($anzahl,10);
    
fclose($anzahl);
}
else{
    
$num count($ipdata);
    if(
$num <= $numip){
        
fputs($ipcont,$userip.':');
        
fclose($ipcont);
        
$anzahl fopen($countname,'r+');
          
$nummer fgets($anzahl,10);
          
$nummer++;
          
fseek($anzahl,0);
         
fputs($anzahl,$nummer);
        
fclose($anzahl);
    }
    else{
        
$pop array_pop($ipdata);
        
array_unshift($ipdata,$userip);
        
$userip2 implode(':',$ipdata);
        
$ipcont fopen($ipfile,'r+');
        
fputs($ipcont,$userip2);
        
fclose($ipcont);
        
$anzahl fopen($countname,'r+');
         
$nummer fgets($anzahl,10);
          
$nummer++;
          
fseek($anzahl,0);
         
fputs($anzahl,$nummer);
        
fclose($anzahl);
    }
}
return 
$nummer;