Homepage Inspire-world | Forum
CGI/Perl Workshops Anzahl Aktionen nach Zeitspanne begrenzen

 Inhaltsverzeichnis/Workshops Übersichtsseite/Anzahl Aktionen nach Zeitspanne begrenzen
Mit dem nachfolgenden Script ist es möglich Aktionen in festgelegten Zeiträumen nach Anzahl zu begrenzen. Dies kann z.B. nützlich sein um Spammails die per Formular versendet werden zu blocken. Es wird hierbei ein Zeitstempel mit einem Counterstand verglichen und bei erreichen eines Zählerstandes vor Ablauf der Frist das weitere benutzen des Scriptes gesperrt.

Hier zunächst das komplette Script

#!/usr/bin/perl

$zeit = time();
print "Content-type: text/html\n\n";

open(ID,"uhrcounter.dat");
$ID = <ID>;
close(ID);

$ID++;

open(IDC,">uhrcounter.dat");
print IDC "$ID";
close(IDC);


if (!-e uhr.dat){
open (FILE, ">uhr.dat");
print FILE "$zeit|$ID\n";
close FILE;
rename(uhr.dat, uhrneu.dat); 
chmod(0666, "uhrneu.dat");
}

open (FILE, "<uhrneu.dat");
$uhr=<FILE>;
close FILE; 

$neuzeit = $zeit - $uhr;

if ($neuzeit >= 60){
open (FILE, ">uhrneu.dat");
print FILE "$zeit";
close FILE; 

open(IDC,">uhrcounter.dat");
print IDC "0";
close(IDC);

}

if ($ID <= 4 ) {
print "Alles OK, weitermachen, es sind max. 4 Benutzungen in 60 Sek. möglich.\n";
print "<br>Das ist Benutzung $ID\n";
} else {
print "Sorry, das darf nur 4 mal in 60 Sek. benutzt werden";
}

Wie funktioniert's?

Zunächst einmal wird die Unix Zeit in Sekunden der Variable $zeit zugewiesen. $zeit = time();

Nun folgt eine Counterroutine die zuerst den Counterstand liest,
open(ID,"uhrcounter.dat");
$ID = <ID>;
close(ID);
diesen hier um 1 erhöht
$ID++;
und dann den neuen Counterstand in die Datei schreibt.
open(IDC,">uhrcounter.dat");
print IDC "$ID";
close(IDC);
Nun wird geprüft ob die Dateien vorhanden sind, nötigenfalls wrden diese angelegt.
if (!-e uhr.dat){ !-e püft ob Datei uhr.dat nicht vorhanden ist. Würde dort stehen -e würde geprüft ob die Datei existiert.

Nun wird die Datei geschrieben mit dem Zeitstempel und der Counterzahl
open (FILE, ">uhr.dat");
print FILE "$zeit|$ID\n";
close FILE;
Hier nun wird mit dem rename Befehl die Datei umbenannt und in der Folgezeile ein CHMOD gesetzt.
rename(uhr.dat, uhrneu.dat); 
chmod(0666, "uhrneu.dat");
}
Nun wird die Datei gelesen.
open (FILE, "<uhrneu.dat");
$uhr=<FILE>;
close FILE; 
Dann werden die Zeiten berechnet $neuzeit = $zeit - $uhr;

Hier nun wird geprüft ob die Bedingung erfüllt ist, die Zeitspanne ist hier auf 60 Sekunden eingestellt. Wenn ja, wird die Zeit in der Datei neu geschrieben und der Counter auf 0 gesetzt.
if ($neuzeit >= 60){
open (FILE, ">uhrneu.dat");
print FILE "$zeit";
close FILE; 

open(IDC,">uhrcounter.dat");
print IDC "0";
close(IDC);
Nun wird mittels einer IF - ELSE Abfrage geprüft ob die Bedingung wahr oder falsch ist und je nachdem die entsprechende Aktion ausgeführt. Hier bei wird bei kleiner gleich 4 (<=) die Benutzung erlaubt, ist die Zahl größer die Benutzung gesperrt.
if ($ID <= 4 ) {
print "Alles OK, weitermachen, es sind max. 4 Benutzungen in 60 Sek. möglich.\n";
print "<br>Das ist Benutzung $ID\n";
} else {
print "Sorry, das darf nur 4 mal in 60 Sek. benutzt werden";
}
Demo: testen




 Zum Inhaltsverzeichnis/Workshops Übersichtsseite/Anzahl Aktionen nach Zeitspanne begrenzen
Autor: Helmut Walter Homepage Inspire-world Fragen, Anregungen und Hinweise bitte in das Forum

Valid HTML 4.0! Valid CSS!