Vinzenz Mai: Online Besucher Script erweitern

Beitrag lesen

Hallo,

Hab mich jetzt mal an der Dateisperre versucht und so siehts aus:

nein, leider ist das noch nicht korrekt.

<?php
$f_online = "besucher.txt";  // hier werden die Daten gespeichert
if( file_exists($f_online) )
{

wie Du bei [link:http://aktuell.de.selfhtml.org/artikel/programmiertechnik/dateisperren/php.htm#lesen-und-schreiben@title=Christian nachlesen kannst], musst Du die Datei zum Lesen und Schreiben öffnen. Ab diesem Zeitpunkt darf keiner mehr die Datei lesen, auch nicht zwischendurch.

$fp = fopen($f_online,"r");

// Öffne zum Lesen und Schreiben
    $fp = fopen($f_online, "r+");

if (!flock ($fp, LOCK_EX)) {    // Dateisperren

//  Naja, die() ist im Normalfall keine Fehlerbehandlung.
//  Hier ist es akzeptabel, siehe [link:/archiv/2007/11/t161277/#m1049225@title=Christians Begründung].

die ('Sperren der Datei fehlgeschlagen!');// Wenn Dateisperren fehlegschlagen
  }
  $t = time();
  $content = fread($fp,filesize($f_online));

// Du darfst hier die Datei nicht schließen, weil damit implizit auch die
// Sperre aufgehoben wird.

fclose($fp);
  $lineas = split("
",$content);
  for( $i = 0; $i < count($lineas); $i++ )
  {
    $datos = split(":",$lineas[$i]);
    $n = $t - $logoutTime;
    if ($datos[0] != $IP && $datos[1] > ($n))
    {
      $res .= "$datos[0]:$datos[1]
";
      $usuarios++;
    }
  }
  $res .= "$IP:$t
";
  $users++;

//  und hier entfällt das Öffnen, setze stattdessen den Dateizeiger zurück
//  und entsorge mit ftruncate() den bisherigen Dateiinhalt, so wie es im
//  verlinkten Artikel steht.

$fp = fopen($f_online,"w");
  fwrite ($fp,$res);
  fclose($fp);
}
echo $users." User online";  // User online ausgeben
?>


> Jetzt muß nur noch was her was die Textdatei aufräumt, wenn kein User Online ist.  
  
Das Aufräumskript wäre dem bisherigen sehr ähnlich:  
  
  Öffne die Datei zum Lesen und Schreiben.  
  Sperre die Datei exklusiv.  
  Lese den Inhalt ein.  
  Splitte an den Zeilenenden auf.  
  Initialisiere die Ausgabevariable mit einer leeren Zeichenkette.  
  Für jede Zeile  
      Wenn der Zeitpunkt weniger als der Ablaufzeitraum her ist.  
          Füge die Zeile an die Ausgabevariable an.  
          Zähle die Anzahl der Benutzer hoch.  
      Ende Wenn  
  Ende Für  
  Entsorge den Inhalt der Datei.  
  Schreibe den Inhalt der Ausgabevariablen in die Datei.  
  Schliesse die Datei.  
  Optional: Gib Dir die Anzahl der Benutzer aus.  
            Damit Du auch mal die 0 siehst :-)  
  
Grundsätzlich ist es dem bisherigen Skript sehr ähnlich, nur entfällt die  
Prüfung der IP-Adresse und es wird auch kein neuer Eintrag vorgenommen.  
  
Das Aufräumskript kannst Du von Zeit zu Zeit selbst starten.  
  
  
Freundliche Grüße  
  
Vinzenz