Reloadsperre

o3rn

Grünschnabel
Guten Tag Liebe Community!
Ich bastel gerad an einem grafischen counter ! Dieser funktioniert auch ganz gut..nur würde ich jetzt gerne eine Reloadsperre einfügen.
Hab aber keine Ahnung wie und die Tutorials die ich gefunden habe haben nicht funktioniert. Entweder sie zerstörten meinen Counter, oder sie haben einfach nicht funktioniert. Hier mal der Code des Counters. Achja die Sperre sollte möglichst ohne Datenbank funktionieren.

PHP:
<?php

if(file_exists("counter.txt")){
	$fp=fopen("counter.txt", "r+");
	$count = fread($fp,6);
	$count++;
	rewind($fp);
	fwrite($fp,$count);
	fclose($fp);
	}
	else{
	$fp=fopen("counter.txt", "w");
	$count="1";
	fwrite($fp,$count);
	fclose($fp);
	}
$count=sprintf("%07d", $count);

for($i=0;$i < 7; $i++)
{
$img_counter=$img_counter."<img src=counter3/counter/".substr($count,$i,1).".gif alt='' width='15px' height='20px'>";

}
printf ($img_counter);
?>
 
Hab hier nen Code-Schnipsel der dir vielleicht weiter hilft.
PHP:
function ip_sperre() { 
   global $REMOTE_ADDR; 
   $reloadlogdatei = "counter/ip.txt"; 
   $anzahleintraege = 50; // nach sovielen ip´s werden die alten gelöscht
   $zeitlimit = 7200; // solange bleibt eine ip gesperrt (in sec.)
    
   // prüfen ob datei existiert wenn nicht erstellen
   if(!file_exists($reloadlogdatei)) { 
      $datei = fopen($reloadlogdatei,"w+"); 
      fclose($datei); 
   } 
   $fp = file($reloadlogdatei); 
   $size = sizeof($fp); 

   // beschreibt die Datei, wenn Liste voll 
   if($size >= $anzahleintraege){ 
      schreiben($reloadlogdatei,"w"); 
      // Prüft, ob eine IP in der Liste steht 
   }
   else { 
      for ($i=0;$i<$size;$i++) { 
         $zeile = explode("|",$fp[$i]); 
         if ($zeile[0] == $REMOTE_ADDR AND $zeile[1] > (time()-$zeitlimit)){ 
            // ip wird gefunden 
            $ausgabe = true; 
         }
         else  { 
            // ip wird nicht gefunden 
            $ausgabe = false; 
         } 
      } 
      // protokolliert die ip 
      schreiben($reloadlogdatei,"a+"); 
   } 
   return $ausgabe; 
}
 
Hab hier nen Code-Schnipsel der dir vielleicht weiter hilft.
PHP:
function ip_sperre() { 
   global $REMOTE_ADDR; 
   $reloadlogdatei = "counter/ip.txt"; 
   $anzahleintraege = 50; // nach sovielen ip´s werden die alten gelöscht
   $zeitlimit = 7200; // solange bleibt eine ip gesperrt (in sec.)
    
   // prüfen ob datei existiert wenn nicht erstellen
   if(!file_exists($reloadlogdatei)) { 
      $datei = fopen($reloadlogdatei,"w+"); 
      fclose($datei); 
   } 
   $fp = file($reloadlogdatei); 
   $size = sizeof($fp); 

   // beschreibt die Datei, wenn Liste voll 
   if($size >= $anzahleintraege){ 
      schreiben($reloadlogdatei,"w"); 
      // Prüft, ob eine IP in der Liste steht 
   }
   else { 
      for ($i=0;$i<$size;$i++) { 
         $zeile = explode("|",$fp[$i]); 
         if ($zeile[0] == $REMOTE_ADDR AND $zeile[1] > (time()-$zeitlimit)){ 
            // ip wird gefunden 
            $ausgabe = true; 
         }
         else  { 
            // ip wird nicht gefunden 
            $ausgabe = false; 
         } 
      } 
      // protokolliert die ip 
      schreiben($reloadlogdatei,"a+"); 
   } 
   return $ausgabe; 
}

Gefunden in dem Thema counter mit reload sperre... ;)

mfg Maik
 
@Maik
Jepp, kommt mir sehr bekannt vor.

@Wod2008
mit session geht das ganze auch. Mit Cookies eher problematisch wenn der User Cookies abgeschaltet hat. Man kann eine Funktion bauen die z.B. prüft ob der User Cookies erlaubt, wenn ja dann setcookie() wenn nein dann in eine session schreiben. Doppelt ja besser ;)
 
Habs jetzt eingefügt aber klappt irgendiwe nicht. Hab ich was Falsch gemacht?

PHP:
<?php


function ip_sperre() { 
   global $REMOTE_ADDR; 
   $reloadlogdatei = "ip.txt"; 
   $anzahleintraege = 50; // nach sovielen ip´s werden die alten gelöscht
   $zeitlimit = 60; // solange bleibt eine ip gesperrt (in sec.)
    
   // prüfen ob datei existiert wenn nicht erstellen
   if(!file_exists($reloadlogdatei)) { 
      $datei = fopen($reloadlogdatei,"w+"); 
      fclose($datei); 
   } 
   $fp2 = file($reloadlogdatei); 
   $size = sizeof($fp2); 

   // beschreibt die Datei, wenn Liste voll 
   if($size >= $anzahleintraege){ 
      schreiben($reloadlogdatei,"w"); 
      // Prüft, ob eine IP in der Liste steht 
   }
   else { 
      for ($i=0;$i<$size;$i++) { 
         $zeile = explode("|",$fp[$i]); 
         if ($zeile[0] == $REMOTE_ADDR AND $zeile[1] > (time()-$zeitlimit)){ 
            // ip wird gefunden 
            $ausgabe = true; 
         }
         else  { 
            // ip wird nicht gefunden 
            $ausgabe = false; 
         } 
      } 
      // protokolliert die ip 
      schreiben($reloadlogdatei,"a+"); 
   } 
   
}  
if($ausgabe==false){
	if(file_exists("counter.txt")){
	$fp=fopen("counter.txt", "r+");
	$count = fread($fp,6);
	$count++;
	rewind($fp);
	fwrite($fp,$count);
	fclose($fp);
	}
	else{
	$fp=fopen("counter.txt", "w");
	$count="1";
	fwrite($fp,$count);
	fclose($fp);
	}
$count=sprintf("%07d", $count);

for($i=0;$i < 7; $i++)
{
$img_counter=$img_counter."<img src=counter3/counter/".substr($count,$i,1).".gif alt='' width='15px' height='20px'>";

}
printf ($img_counter);
}
return $ausgabe; 
?>
 
PHP:
<?php
function schreiben($datei,$mode) {  
   $fp = @fopen($datei,$mode); 
   flock($fp,2); 
   fwrite($fp,$_SERVER['REMOTE_ADDR']."|".time()."\n"); 
   flock($fp,3); 
   fclose($fp); 
} 

function ip_sperre()
{
	$reloadlogdatei = "ip.txt";
	$anzahleintraege = 50; // nach sovielen ip´s werden die alten gelöscht
	$zeitlimit = 60; // solange bleibt eine ip gesperrt (in sec.)
	
	// prüfen ob datei existiert wenn nicht erstellen
	if(!file_exists($reloadlogdatei))
	{
		$datei = fopen($reloadlogdatei,"w+");
		fclose($datei);
	}
	$fp2 = file($reloadlogdatei);
	$size = sizeof($fp2);
	
	// beschreibt die Datei, wenn Liste voll
	if($size >= $anzahleintraege)
	{
		schreiben($reloadlogdatei,"w");
		// Prüft, ob eine IP in der Liste steht
	}
	else
	{
		for ($i=0;$i<$size;$i++)
		{
			$zeile = explode("|",$fp[$i]);
			if ($zeile[0] == $_SERVER['REMOTE_ADDR'] && $zeile[1] > (time()-$zeitlimit))
			{
			// ip wird gefunden
			$ausgabe = true;
			}
			else
			{
			// ip wird nicht gefunden
			$ausgabe = false;
			}
		}
	// protokolliert die ip
	schreiben($reloadlogdatei,"a+");
	}
return $ausgabe;
}
if(ip_sperre())
{
	if(file_exists("counter.txt"))
	{
		$fp=fopen("counter.txt", "r+");
		$count = fread($fp,6);
		$count++;
		rewind($fp);
		fwrite($fp,$count);
		fclose($fp);
	}
	else
	{
		$fp=fopen("counter.txt", "w");
		$count="1";
		fwrite($fp,$count);
		fclose($fp);
	}
	$count=sprintf("%07d", $count);
	
	for($i=0;$i < 7; $i++)
	{
		$img_counter=$img_counter."<img src=counter3/counter/".substr($count,$i,1).".gif alt='' width='15px' height='20px'>";
	
	}
	printf ($img_counter);
}

?>
Du musst die Funktion ip_sperre auch benutzen ^^
btw. ich hab vergessen die schreiben() Funktion zu kopieren.
Probier das mal.

edit: ne Moment. Da stimmt nochwas nicht ^^

PHP:
<?php
function schreiben($datei,$mode) {  
   $fp = @fopen($datei,$mode); 
   flock($fp,2); 
   fwrite($fp,$_SERVER['REMOTE_ADDR']."|".time()."\n"); 
   flock($fp,3); 
   fclose($fp); 
} 

function ip_sperre()
{
	$reloadlogdatei = "ip.txt";
	$anzahleintraege = 50; // nach sovielen ip´s werden die alten gelöscht
	$zeitlimit = 60; // solange bleibt eine ip gesperrt (in sec.)
	
	// prüfen ob datei existiert wenn nicht erstellen
	if(!file_exists($reloadlogdatei))
	{
		$datei = fopen($reloadlogdatei,"w+");
		fclose($datei);
	}
	$fp2 = file($reloadlogdatei);
	$size = sizeof($fp2);
	
	// beschreibt die Datei, wenn Liste voll
	if($size >= $anzahleintraege)
	{
		schreiben($reloadlogdatei,"w");	
	}
	else
	{
		// Prüft, ob eine IP in der Liste steht
		for ($i=0;$i<$size;$i++)
		{
			$zeile = explode("|",$fp2[$i]);
			if ($zeile[0] == $_SERVER['REMOTE_ADDR'] AND $zeile[1] > (time()-$zeitlimit))
			{
				// ip wird gefunden
				$ausgabe = true;
			}
			else
			{
				// ip wird nicht gefunden
				$ausgabe = false;
			}
		}
	// protokolliert die ip
	schreiben($reloadlogdatei,"a+");
	}
return $ausgabe;
}
if(!ip_sperre())
{
	if(file_exists("counter.txt"))
	{
		$fp=fopen("counter.txt", "r+");
		$count = fread($fp,6);
		$count++;
		rewind($fp);
		fwrite($fp,$count);
		fclose($fp);
	}
	else
	{
		$fp=fopen("counter.txt", "w");
		$count="1";
		fwrite($fp,$count);
		fclose($fp);
	}
}
	$count=sprintf("%07d", $count);
	
	for($i=0;$i < 7; $i++)
	{
		$img_counter=$img_counter."<img src=counter3/counter/".substr($count,$i,1).".gif alt='' width='15px' height='20px'>";
	
	}
	printf ($img_counter);
?>
Einmal ausprobieren bitte ;)

edit: Hey, grad keine Zeit auf deine Antwort zu warten ^^, sorry. Habs ausprobiert, klappt einwandfrei. Viel Spass damit ;)
 
Zuletzt bearbeitet:
es klappt soweit nur is noch ein Fehler. wenn ich während der ip sperre auf aktualisiern drücke dann setzt er den counter auf 0, wenn ich dann aber wenn die Sperre abgelaufen ist nochmal drücke zählt er hoch bei der richtigen zah also von 95 auf 96 nicht wider von vorn etc...
kann jmd den Fehler entdeken?
 
Oh, da hab ich garnicht drauf geachtet. Ich bin in ca. 1 Stunde wieder da. Wenn bis dahin keiner den Fehler entdeckt hat schau ich nochmal rein ;)
 
Hi,


Wieso hast du dich eigentlich nicht für einen MySQL Counter entschieden?
Und ein Counter mit einer Reloadsperre fiinde ich komisch :P
Wäre es nicht besser die IPs in der mysql-db abzuspeichern und sobald die aktuelle IP nicht in der Tabelle vorhanden ist -> counter++

Dann brauchst du nur noch ein Cronjob, der die IPs regelmäßig löscht.

bo
 
Zurück