• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Ip Sperre für Counter

PhpUser

Neues Mitglied
Hey,
Ich habe einen Counter gefunden :

<?php
if(!file_exists("count2.txt"))
{$counter=fopen("count2.txt", "a");}
else
{$counter=fopen("count2.txt", "r+");}
$aufruf=fgets($counter,100);
$aufruf=$aufruf+1;
rewind($counter);
fputs($counter,$aufruf);
fclose($counter);
?>
wie bekomme ich dort eine Ip sperre rein, sodass er nicht jeden klick zählt.
Wenn möglich ohne Mysql etc.
Vielen Dank!
 
Das ist einfach.
Speicher einfach alle IP's die auf die Website gehen in einer Textdatei ab.
Wenn der Benutzer wieder die Seite betritt, prüfst du, ob die IP vorhanden ist, wenn ja, dann wird nichts gezählt, wenn schon, dann wird es gezählt. Das machst du mit einer schönen IF Abfrage.

Oder, mit Cookies, was allerdings nicht die beste Variante ist, da sich ein Cookie nach einer Eingetippten Zeitspanne entweder löscht, oder der Benutzer den Cookie löscht.
 
oder per cookie
PHP:
// Abfragewert des Cookies ist der laufende Tag im Monat
$cookie_value = date("d");
// Falls der laufende Tag nicht dem eingetragenen Cookie-Wert entspricht oder der Cookie nicht gesetzt ist, wird der Counter aufgezählt
if ($_cookie['hitcount'] != $cookie_value){
	if(!file_exists("count2.txt"))
	{$counter=fopen("count2.txt", "a");}
	else
	{$counter=fopen("count2.txt", "r+");}
	$aufruf=fgets($counter,100);
	$aufruf=$aufruf+1;
	rewind($counter);
	fputs($counter,$aufruf);
	fclose($counter);
// und nach dem Zählen wird der Cookie gesetzt/aktualisiert
	setcookie("hitcount", $cookie_value, time() + 86400);
// Lebensdauer des Cookies ist 24 stunden
// Danach verfällt er, falls er nicht inzwischen nach Tageswechsel aktualisiert wurde
}
Falls du die Lebensdauer des Cookies auf 1 Stunde reduzieren willst, wäre die Zeile so
PHP:
setcookie("hitcount", $cookie_value, time() + 3600);
15 Minuten wären
PHP:
setcookie("hitcount", $cookie_value, time() + 900);
Der Zahlenwert ist immer Lebensdauer in Sekunden
 
denk auch dran das es dynamische IP addressen gibt d.h. sie andern sich .... die mehrheit der Internet benutzer hat eine dynamische weil das sicherer ist. Die IP kann am nachsten tag anders sein aber ein cookie kannst du auch fur mehr als 24 stunden festlegen (angenommen der cookie wird nicht vom user geloscht)
 
PHP:
// Abfragewert des Cookies ist der laufende Tag im Monat 
$cookie_value = date("d"); 
// Falls der laufende Tag nicht dem eingetragenen Cookie-Wert entspricht oder der Cookie nicht gesetzt ist, wird der Counter aufgezählt 
if ($_cookie['hitcount'] != $cookie_value){ 
    if(!file_exists("count2.txt")) 
    {$counter=fopen("count2.txt", "a");} 
    else 
    {$counter=fopen("count2.txt", "r+");} 
    $aufruf=fgets($counter,100); 
    $aufruf=$aufruf+1; 
    rewind($counter); 
    fputs($counter,$aufruf); 
    fclose($counter); 
// und nach dem Zählen wird der Cookie gesetzt/aktualisiert 
    setcookie("hitcount", $cookie_value, time() + 86400); 
// Lebensdauer des Cookies ist 24 stunden 
// Danach verfällt er, falls er nicht inzwischen nach Tageswechsel aktualisiert wurde 
}
wenn ich den Code verwende und dort noch
PHP:
echo $aufruf;
verwende um zusehen, wieviele die Seite angucken, funktioniert die Ip sperre gar nicht. Bei jedem Reload zählt er mit.
Andere Idee? bei mir auf der Seite sieht der Code so aus:
PHP:
          <?php
// Abfragewert des Cookies ist der laufende Tag im Monat
$cookie_value = date("d");
// Falls der laufende Tag nicht dem eingetragenen Cookie-Wert entspricht oder der Cookie nicht gesetzt ist, wird der Counter aufgezählt
if ($_cookie['hitcount'] != $cookie_value){
    if(!file_exists("count2.txt"))
    {$counter=fopen("count2.txt", "a");}
    else
    {$counter=fopen("count2.txt", "r+");}
    $aufruf=fgets($counter,100);
    $aufruf=$aufruf+1;
    rewind($counter);
    fputs($counter,$aufruf);
    fclose($counter);
// und nach dem Zählen wird der Cookie gesetzt/aktualisiert
    setcookie("hitcount", $cookie_value, time() + 86400);
    echo $aufruf;
// Lebensdauer des Cookies ist 24 stunden
// Danach verfällt er, falls er nicht inzwischen nach Tageswechsel aktualisiert wurde
}  
?>
 
hmm...auf anhieb kann ich das jetzt nicht sagen. immerhin hab ich dein script nur erweitert ;)
hab auch keine große lust darin rumzukramen.
versuchs mal hiermit. den hab ich mal für mich geschrieben
PHP:
<?php
$cookie_life = 3600;
$cookie_name = "hitcounter";
$cookie_value = "hitcounter";
$count = file("counter.txt");
$countfile = "counter.txt";

if(!isset($_COOKIE['hitcounter'])){
	setcookie($cookie_name, $cookie_value, time()+$cookie_life);
	$countfile = fopen("counter.txt", "r+");
	$count[0]++;
	fwrite($countfile, $count[0]);
	fclose($countfile);
}
?>

ausgabe mit
PHP:
echo $count
 
Zuletzt bearbeitet:
oh ich hab eine variable vergessen umzuschreiben bevor ich gepostet hab.
habs abgeändert.
versuch jetzt mal.
wenn es jetzt nicht funktioniert, stimmt bei dir was nicht.
der counter geht auf jeden fall. ist bei mir im einsatz!
 
Textdateien:
PHP:
function IPCounter_GetHits($counterName) {
   $path = "IPCounter.".$counterName.".txt";
  if (file_exists($path)) {
   $content = implode("",file($path));
   $content = explode("§",$content);
    return count($content)-1;
  } else {
   $counterfile = fopen($path,"w+");
   rewind($counterfile);
   fclose($counterfile);
  }
   return 0;
 }
 function IPCounter_AddHit($counterName) {
  $path = "IPCounter.".$counterName.".txt";
   if (isSet($_SERVER)) {
    if (isSet($_SERVER["HTTP_X_FORWARDED_FOR"])) {
     $ipNow = $_SERVER["HTTP_X_FORWARDED_FOR"];
    } elseif (isSet($_SERVER["HTTP_CLIENT_IP"])) {
     $ipNow = $_SERVER["HTTP_CLIENT_IP"]; 
    } else {
     $ipNow = $_SERVER["REMOTE_ADDR"];
    } 
   } else {
    if (getenv("HTTP_X_FORWARDED_FOR") ) {
     $ipNow = getenv("HTTP_X_FORWARDED_FOR");
    } elseif (getenv("HTTP_CLIENT_IP")) {
     $ipNow = getenv("HTTP_CLIENT_IP");
    } else {
     $ipNow = getenv("REMOTE_ADDR");
    }
   }
  if (file_exists($path)) {
   $content = implode("",file($path));
   $content = explode("§",$content);
   $alright = true;
    foreach ($content as $v) {
     if ($v == $ipNow) {
      $alright = false;
      break;
     }
    }
   if ($alright == true) {
    $counterfile = fopen($path,"w+");
    fwrite($counterfile,implode("§",$content).$ipNow."§");
    rewind($counterfile);
    fclose($counterfile);
   }
  } else {
   $counterfile = fopen($path,"w+");
   fwrite($counterfile,$ipNow."§");
   rewind($counterfile);
   fclose($counterfile);
  }
 }
ist zwar nicht schön, und jemand der sich auskennt, kann das sicher kürzer hinbekommen, funktioniert aber (bei mir):
Aufruf zum Hinzufügen beim Counter, zum Beispiel am Anfang des Phps:
PHP:
 IPCounter_AddHit("MeineSeite");
Sollte nur solche Zeichen enthalten, wie Du auch Dateien nennst.
Und wenn Du die Zahl der Besucher Deiner Seite möchtest:
PHP:
  echo IPCounter_GetHits("MeineSeite");
Wahrscheinlich gibt es solche Funktionen schon massenhaft. : )
LG
 
Zurück
Oben