*

Offline Jo

  • *****
  • 232
  • Geschlecht: Männlich
    • JoLichter.de
MODX webCounter
« am: 24. Oktober 2015, 14:32:01 »
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;
« Letzte Änderung: 10. November 2015, 21:51:00 von Jo »