Hallo,
ich habe mich jetzt in meinem "PHP-Selbststudium" an einen Counter mit IP-Blocker ran gewagt. Zu meiner Freude funktioniert er auch - er zählt weiter und doppelte IP's werden nicht gezählt. Doch ein Problem gibt es dennoch: Wenn man die Seite das 1. Mal aufruft (also die IP Adresse noch nicht gespeichert ist) kommt die Fehlermeldung, dass in Zeile 44 eine unbekannte Variable steht. ($gefunden)
Hier nun erst einmal der Quellcode:
PHP-Code:
<?php
// Grafik Counter mit IP-Sperre
//0=keine Reloadsperre, 1=aktiv
$aktiv = 1;
// Zeit der Sperre in Minuten
$zeit = 1;
// IP-Datei
$ipdatei = "counter/ips.txt";
// Counterdateiname
$datei="counter/counter.txt";
// Anzahl der führenden Nullen
$stellen = 5;
// Festlegen der Bilddimensionen
$breite="12";
$hoehe="16";
// 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);
// Das ist die Zeile 44 !!!
return($gefunden==1) ? 1 : 0;
}
// Counter-Abfrage
if(file_exists($datei) && ($aktiv==0 || ($aktiv==1 &&
pruf_IP($REMOTE_ADDR)==0))) {
//Falls Datei existiert, wird sie ausgelesen und 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))) {
//wenn Datei nicht existiert, wird sie mit Wert 1 angelegt
$fp=fopen($datei,"w");
$zahl="1";
fputs($fp,$zahl,$stellen);
fclose($fp);
} else {
// Die Datei existiert, jedoch es ist der gleiche Nutzer
$fp=fopen($datei,"r");
$zahl=fgets($fp,$stellen);
fclose($fp);
}
// Diese Funktion sorgt für die führenden Nullen.
$zahl=sprintf("%0".$stellen."d",$zahl);
//Hier wird der Zähler aus Bildern zusammen gesetzt
$bild_counter='';
for($i=0;$i<$stellen;$i++){
$bild_counter.="<img src=counter/images/" . substr($zahl,$i,1) .
".jpg align=absmiddle width=$breite height=$hoehe>";
}
?>
Irgendwie erscheint mir der Fehler auch logisch - die Zeile 44 ist in der Else-Schleife, die greift, wenn man die Seite das 1. Mal startet und die IP-Adresse noch nicht in der Datei steht. Und eben hier ist ja auch kein $gefunden definiert, doch wenn ich versuche diese Variable auch in der else-Anweisung zu definieren, dann kommt zwar keine Fehlermeldung mehr, jedoch zählt der Counter auch nicht ...
Ich habe schon alles (was mir eingefallen ist) versucht, jedoch immer ohne Erfolg, ich würde mich daher über schnelle Hilfe sehr freuen.
Vielen Dank!