Logo

[php] Codeschnipsel: Reloadsperre mit Textdatei

Textdateibasierte Reloadsperre, gibt die Zeit (in Sekunden) zurück wie lange die Sperre noch aktiv ist. Bei Rückgabe von Null ist die Sperre nicht aktiv. Der Beispielaufruf zeigt die Restzeit in Stunden, Minuten und Sekunden an.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?php
function ReloadSperre()
{
    
// Dauer der Sperre in Sekunden
    
$sperrZeit 3600// 3600 = 1 Stunde
    
$dateiname "reload.txt";
    
// Zeit bis Sperre abgelaufen
    
$reloadZeit 0;
    
// IP-Adresse
    
$ip $_SERVER['REMOTE_ADDR'];
    
// aktuelle Zeit
    
$zeit time();
    
$datei file($dateiname);
    
// Datei durchlaufen und auf Sperren prüfen
    
for($i 0$i sizeof($datei); $i++)
    {
        
$eintrag explode("|"$datei[$i]);
        
// Sperre aktiv?
        
if($eintrag[0] > $zeit $sperrZeit)
        {
            
// gleiche IP?
            
if(trim($eintrag[1]) == $ip)
            {
                
// Restdauer der Sperre berechnen
                
$reloadZeit $sperrZeit - ($zeit $eintrag[0]);
            }
            
// Zeile wieder dem Dateiinhalt hinzufügen
            
$neuerInhalt .= $datei[$i];
        }        
    }
    
// Keine Sperre => neuen Eintrag erzeugen
    
if($reloadZeit == 0)
        
$neuerInhalt .= $zeit."|".$ip."\n";
    
// Daten in Datei speichern
    
$handle fopen($dateiname"w");
    
fwrite($handle$neuerInhalt);
    
fclose($handle);
    
// Restzeit zurückgeben
    
return $reloadZeit;
}
// Beispielaufruf
$reload ReloadSperre();
if(
$reload 0)
    echo 
"Reloadsperre noch ".sprintf("%02d:%02d:%02d",
        
$reload 60 60, ($reload 60) % 60$reload 60)." aktiv";
else
    echo 
"Keine Reloadsperre";
?>