kostenloser Webspace werbefrei: lima-city


Besucherzahl beschränken

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    oli-b

    oli-b hat kostenlosen Webspace.

    Hallo,

    Ich möchte, für einen Wettbewerb, dass eine Seite nur für eine bestimmte Anzahl Betrachter erreichbar ist, ist die Anzahl erreicht, soll eine automatische Umleitung erfolgen. Also z.b. Die ersten drei Besucher können einen Text sehen, jeder weitere erhält die Nachricht, zu spät ;)

    Gibt es hierzu ein Script, dass man Vlt. Direkt verwenden kann?

    Viele Grüße
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. oli-b schrieb:
    Gibt es hierzu ein Script, dass man Vlt. Direkt verwenden kann?

    Hey oli-b,

    das kannst Du mit PHP doch ganz simpel selber machen ;)
    Du musst eine Datei "counter.txt" im selben Ordner anlegen, ansonsten braucht es nicht mehr als die Zeilen unten ...

    Was für einen Wettbewerb bastelst du dir denn da gerade zusammen? Kann man da was gewinnen? :P :biggrin:

    <?php
    
    // Einstellungen
    $zugriffe_erlaubt = 5;
    $zielURL = "http://google.de/";
    
    // Datei öffnen und Zähler auslesen
    $datei = fopen("counter.txt","r+");
    $counter = fgets($datei);
    
    // Korrigieren, falls Datei leer - Zähler = 0
    if($counter == "") {
       $counter = 0;
    }
    
    // Zähler + 1
    $counter++;
    
    // Auf Zähler reagieren
    if($counter <= $zugriffe_erlaubt) {
        // Zugriff schnell genug
    } else {
        // Zu spät, weiterleiten.
        header("Location: $zielURL");
    }
    
    // Datei "zurückspulen", beschreiben und schließen
    rewind($datei);
    fwrite($datei, $counter);
    fclose($datei);
    
    ?>
  4. Bei deinem Beispiel können Race Conditions auftreten, d.h. bei 2 gleichzeitigen Zugriffen kann folgendes passieren:

    (Inhalt von counter.txt sei "1")
    User 1 greift auf dieses Skript zu, was counter.txt einliest ("1").
    User 2 greift auf dieses Skript zu, was counter.txt einliest ("1").

    Für User 1 erhöht das Skript "1" zu "2".
    Für User 2 erhöht das Skript "1" zu "2", weil es ja parallel zu dem anderem läuft.

    Für User 1 wird "2" in counter.txt geschrieben.
    Für User 2 wird "2" in counter.txt geschrieben.
    (Inhalt von counter.txt ist nun "2" statt "3")

    Hiermit wird es verhindert, weil counter.txt vor dem Lesen gesperrt wird:

    <?php
    // Einstellungen
    $zugriffe_erlaubt = 5;
    $alternativURL = "http://google.de/";
    
    // Datei öffnen und Zähler auslesen
    $datei = fopen("counter.txt","r+");
    
    //Solange warten, bis wir schreiben dürfen
    if(flock($datei, LOCK_EX)){
    
    
    $counter = fgets($datei);
    
    // Korrigieren, falls Datei leer - Zähler = 0
    if($counter == "") {
       $counter = 0;
    }
    
    // Zähler + 1
    $counter++;
    
    // Auf Zähler reagieren
    if($counter <= $zugriffe_erlaubt) {
    
    	# Zugriff ok, Inhalt anzeigen
    	# weiterer Programmcode
    
    } else {
       	// Zu spät, weiterleiten.
       	header("Location: $alternativURL");
    	# Oder Alternativ ne Fehlermeldung ausgeben - eine Weiterleitung ohne Angabe des Grundes ist irritierend
    }
    
    #Dateiinhalt löschen, sonst wird nur überschrieben - steht z.B. "serikztgh" in der Datei und wird "1" geschrieben, ist der Dateiinhalt danach "1erikztgh"
    ftruncate($datei, 0);
    # Dateizeiger zurücksetzen, schreiben und schließen
    rewind($datei);
    fwrite($datei, $counter);
    fclose($datei);
    # Datei entsperren
    flock($datei, LOCK_UN);
    
    }else{
     echo "Sperren der Datei fehlgeschlagen!";
    }
    
    ?>
    (ungetestet)

    Und: Ist der Zugriff noch ok, muss dein Skript den zu schützenden Inhalt ausgeben - eine Weiterleitung bringt ohne weiteres nichts, weil auf die Seite, auf die weitergeleitet wird, natürlich auch direkt zugegriffen werden kann.
  5. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!