counter mit reload sperre...

C

creutzfeld

naja ich bin ned so der php held, also hab ich mir mal auf ner seite ein kleines tut reingezogen wie man so nen counter am besten coded und da is folgendes rausgekommen:

Code:
<?PHP
$fn = "counter/counter.txt";
if (file_exists($fn))
{
// counterstand auslesen
$fp = fopen($fn,"r");
$zahl = fgets($fp,10);
fclose($fp);
}
else
// beim ersten aufruf..
$zahl = 0;

// counterstand erhöhen...
$zahl = $zahl+1;
echo "$zahl";
// neu schreiben
$fp = fopen($fn,"w");
flock($fp,2);
fputs($fp,$zahl);
flock($fp,3);
fclose($fp);
?>


naja jetzt wüsst ich gern wie ich sowas wie ne ip sperre einbinden kann... praktisch ne sperre für 2 stunden oder so sonst sind die counterstände bald ziemlich hoch.. wär dankbar für ne antwort!
 
Eine einfach Methode wäre das ganze mit einem Cookie zu machen. Wenn kein Cookie da => hochzählen. Wenn ein Cookie da => nicht hochzählen. Bei einem Cookie kannst du auch ein Art "Verfallsdatum" angeben. Damit wäre auch das mit den 2 Stunden gelöst.
Ich kenne mich leider mit Cookies nicht so aus, aber das dürfte die einfachste und bequemste Lösung sein.
 
ähm ich auch ned... :)

aber vielleicht wärs am besten dass er die ips in ne text file speichert und die dann jeweils um 00.00 löscht und neu anlegt... ginge sowas?
 
Also die IPs in ein Textfile zu schreiben ist einfach. Nur wüsste ich nicht wie das gehen soll dass er die immer um Mitternacht löscht. Glaube kaum dass das möglich ist. Du müsstest dummerweise bei dieser Methode bei jedem User die ganze Datei einlesen und die IPs vergleichen. Ist ein wenig aufwendig und besonders bei einer gut besuchten Seite kaum zu empfehlen.
Ich hab mal in der PHP-Doku gestöbert und bin fündig geworden :) .
PHP:
setcookie ("Cookie", "", time()+7200);
Setzt du einen Cookie der in 2 Stunden verfällt. Prüfen ob einer gesetzt ist geht wenn ich das richtig gesehen habe mit isset($cookie);.
Die URL dazu ist: http://www.php.net/manual/de/function.setcookie.php
 
ääääääääähhhhmmm bist du mir böse wenn ich jetzt sag das kapier ich nit? :)
mir wärs eigentlich auch egal wenn der counter irgendein fertiges script wär die hauptsache is dass es ein textcounter is und dass ich ihn hosten kann... is so n kleiner tick von mir, dass ich alle meine scripts selbst hosten muss :)
 
no problem !

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

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; 
}


$fn = "counter/counter.txt";
if (file_exists($fn))
{
// counterstand auslesen
$fp = fopen($fn,"r");
$zahl = fgets($fp,10);
fclose($fp);
}
else
// beim ersten aufruf..
$zahl = 0;

// counterstand erhöhen...
echo "$zahl";

if (ip_sperre()==false)
{
// neu schreiben
$zahl = $zahl+1;
$fp = fopen($fn,"w");
flock($fp,2);
fputs($fp,$zahl);
flock($fp,3);
fclose($fp);
}
?>

Du musst natürlich im Ordner counter die Datei ip.txt anlegen !
Es werden maximal 50 Ip´s gespeichert welche für 2 Stunden gesperrt bleiben !

Kannste ja ändern !
 
yeah dankdir :):)
isses dir recht wenn ich dafür nen link auf deine page setze wenn die seite fertig is?

<edit>
da kommt n fehler wenn ich den counter ausführen will....

Code:
supplied argument is not a valid file-handle ressource in /users/ionichost.com/xnc/count.php at line 5 

supplied argument is not a valid file-handle ressource in /users/ionichost.com/xnc/count.php at line 6 

supplied argument is not a valid file-handle ressource in /users/ionichost.com/xnc/count.php at line 7 

supplied argument is not a valid file-handle ressource in /users/ionichost.com/xnc/count.php at line 8

was kann das sein?
</edit>
 
@ creutzfeld
Der Fehler wird wohl der sein dass du die Zugriffsrechte für die Datei falsch (oder gar nicht) gesetzt hast. Standradmäßig darf ein PHP-Skript nicht in Dateien schreiben. Du musst einfach die Zugriffsrechte der Datei auf 777 setzen. Dazu machst du nen Rechtsklick auf die Datei und gehst in dem Menü das aufgeht auf Zugriffsrechte oder wie auch immer das bei deinem FTP-Client heißt. Wenn du das aber noch unter Win testest würde ich mal schaun ob die Datei dummerweise schreibgeschützt ist.
 

Neue Beiträge

Zurück