Teil von  SELFPHP   Teil von  Praxisbuch  Teil von  Counter – der Besucherzähler
Letztes Update: 16.08.2005 17:53:45


Navigation

Seite News *

Seite Startseite
Seite Über SELFPHP
Seite Werbung
Seite Kontakt
Seite Forum *
Seite Download *
Seite SELFPHP Banner *
Seite SELFPHP in Buchform
Seite Newsletter *
Seite Impressum

 
* Link führt ins Internet



 

Counter mit IP-Sperre




Die dritte und letzte Variante eines Besucherzählers die wir Ihnen vorstellen wollen, ist der Besucherzähler, welcher eine IP-Sperre besitzt. Diese IP-Sperre ermöglicht es Ihnen den jeweiligen Besucher lediglich ein einziges mal pro Besuch zu registrieren und zwar für eine festgelegte Zeit. Natürlich stellt dies keinen absoluten Schutz vor Refresh Aufrufen dar, aber immer hin lässt sich hiermit der Besucherzähler wesentlich sinnvoller betreiben.

Das erforderliche Skript zur Umsetzung des Counters stellt sich, wie folgt dar:


<?

/////////////////////////////////////////
// Counter + Reloadsperre v1.0
/////////////////////////////////////////

// 0=keine Reloadsperre, 1=Reloadsperre
$aktiv = 1;
// Zeit der Reloadsperre in Minuten
$zeit = 1;
// IP-Datei
$ipdatei = "ips.txt";
// Counterdatei
$datei = "counter.txt";
// Anzahl der führenden Nullen
$stellen = 5;
// Festlegen der Bild-Dimensionen
$breite="15";
$hoehe="19";

/////////////////////////////////////////
// IP-Reloadsperre
/////////////////////////////////////////

function pruf_IP($rem_addr) {
  global
$ipdatei,$zeit;
  @
$ip_array = file($ipdatei);
  
$reload_dat = fopen($ipdatei,"w");
  
$this_time = time();
  for (
$i=0; $i<count($ip_array); $i++) {
    list(
$ip_addr,$time_stamp) = explode("|",$ip_array[$i]);
    if (
$this_time < ($time_stamp+60*$zeit)) {
      if (
$ip_addr == $rem_addr) {
        
$gefunden=1;
      }
      else {
        
fwrite($reload_dat,"$ip_addr|$time_stamp");
      }
    }
  }
  
fwrite($reload_dat,"$rem_addr|$this_time\n");
  
fclose($reload_dat);
  return (
$gefunden==1) ? 1 : 0;
}

/////////////////////////////////////////
// Counter-Abfrage
/////////////////////////////////////////

if (file_exists($datei) && ($aktiv==0 || ($aktiv==1 && pruf_IP($REMOTE_ADDR)==0))) {
  
// Falls die Datei existiert, wird sie ausgelesen und
  // der dort enthaltene Wert um Eins erhöht.
  
$fp=fopen($datei,"r+");
  
$zahl=fgets($fp,$stellen);
  
$zahl++;
  
rewind($fp);
  
flock($fp,2);
  
fputs($fp,$zahl,$stellen);
  
flock($fp,3);
  
fclose($fp);
}else if (!
file_exists($datei) && ($aktiv==0 || ($aktiv==1 && pruf_IP($REMOTE_ADDR)==0))) {
  
// Die Datei counter.txt existiert nicht, sie wird
  // neu angelegt und mit dem Wert 1 gefüllt.
  
$fp=fopen($datei,"w");
  
$zahl="1";
  
fputs($fp,$zahl,$stellen);
  
fclose($fp);
} else {
  
// Die Datei existiert zwar, jedoch handelt
  // es sich wahrscheinlich um den gleichen Besucher
  
$fp=fopen($datei,"r");
  
$zahl=fgets($fp,$stellen);
  
fclose($fp);
}
    
$zahl=sprintf("%0".$stellen."d",$zahl);

?>



Wie Sie sehen setzt sich diese Lösung ähnlich zusammen, wie der Text- bzw. Grafikcounter. Es ist lediglich eine Funktion pruf_IP() hinzugekommen, die Sie in die Lage versetzt die jeweilige IP-Adresse des Besuchers und die Besuchszeit zu speichern. Hierzu wird eine Textdatei ips.txt angelegt, in dieser befinden sich sämtliche Besucher-IPs samt Besuchszeiten. Die Reloadsperre ist für jeden Besucher 1 Minute lang aktiv, dies lässt sich mit Hilfe der Variablen $zeit natürlich ohne weiteres raufsetzen. Die durch die Funktion erzeugten Einträge innerhalb der ips.txt Datei setzen sich, wie folgt zusammen ipadresse|besuchszeit.


Beispiel – Zeile aus der ips.txt Datei

127.0.0.1|1075942181

Die Counter-Abfrage als auch die Ausgabeformatierung sind in Ihren wesentlichen Bestandteilen identisch mit den vorherigen Lösungen. Der Aufruf des Counters kann anschliessend aus jedem beliebigen PHP-Skript Ihrer Website erfolgen und zwar, wie folgt:


Beispiel - Textcounter



<?php

include("counter.php");
echo
"<font face=Arial color=blue size=5>$zahl</font>";

?>




Beispiel – Grafikcounter



<?php

include("counter.php");

// Hier wird dann der Zähler aus Bildern zusammengesetzt
for($i=0;$i<$stellen;$i++){
$bild_counter=$bild_counter . "<img src=bilder/" . substr($zahl,$i,1) . ".gif align=absmiddle width=$breite height=$hoehe>";
}

echo
$bild_counter;

?>



Tipp: Nehmen Sie sich genügend Zeit um sich mit der IP-Sperre zu befassen. Diese Funktion kann Ihnen auch für weitere Anwendungen, wie beispielsweise bei einem Gästebuch nützliche Dienste erweisen, um doppelte Einträge zu vermeiden.



 


Grafikcounter
 






© 2001-2005 E-Mail SELFPHP - Damir Enseleit, info@selfphp.deImpressumKontakt
© 2005 E-Mail PHP5 Praxisbuch - Matthias Kannengiesser, m.kannengiesser@selfphp.de