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";
?>