DiamondDog: Online Besucher Script erweitern

Hallo Leute,
ich habe da folgendes Script im Netz gefunden:

  
<?PHP  
$daten="besucher.txt";  
$time = time();  
$ip = getenv("REMOTE_ADDR");  
$ablaufzeit = "$time"-"300";  
$pruefung = @file($daten);  
while (list ($line_num, $line) = @each ($pruefung))  
{$zeiten = explode("&&",$line);  
if($zeiten[0] <= $ablaufzeit)  
{$fp = fopen( "$daten", "r" );  
$contents = fread($fp, filesize($daten));  
fclose($fp);  
$line=quotemeta($line);  
$string2 = "";  
$replace = ereg_replace($line, $string2, $contents);  
$fh=fopen($daten, "w");  
@flock($fp,2);  
fputs($fh, $replace);  
@flock($fp,3);  
fclose($fh);}}  
$ippruefung = @file($daten);  
while (list ($line_num, $line) = @each ($ippruefung))  
{$ips = explode("&&",$line);  
if($ips[1] == $ip)  
{$fp = fopen( "$daten", "r" );  
$contents = fread($fp, filesize($daten));  
fclose($fp);  
$line=quotemeta($line);  
$string2 = "";  
$replace = ereg_replace($line, $string2, $contents);  
$fh=fopen($daten, "w");  
@flock($fp,2);  
fputs($fh, $replace);  
@flock($fp,3);  
fclose($fh);}}  
$fp = fopen("$daten", "a+");  
flock($fp,2);  
fputs ($fp, "$time&&$ip&&\n");  
flock($fp,3);  
fclose ($fp);  
$anzahldaten = file($daten);  
$anzahl = count($anzahldaten);  
echo "$anzahl User online";  
?>  

~~~das funktioniert auch super.  
Nur hätte ich es jetzt gerne so, das das Script mir die Anzahl der Online User nicht nur aktuell auf der Seite anzeigt, sondern auch in eine user.txt schreibt.  
Wäre super wenn mir jemand sagen könnte wie ich das hinbekomme.  
  
Ps: Bin noch PHP Anfänger.  
Danke schon mal.  
Mfg Dog
  1. Lieber DiamondDog,

    Nur hätte ich es jetzt gerne so, das das Script mir die Anzahl der Online User nicht nur aktuell auf der Seite anzeigt, sondern auch in eine user.txt schreibt.

    danke für den ellenlangen Code. Du hättest besser hineinschauen sollen, anstatt ihn hier zu posten. Dann hättest Du gleich in den ersten drei Zeilen gefunden, dass die Daten in eine Textdatei "besucher.txt" geschrieben werden.

    Wenn Du unbedingt willst, dass die Datei stattdessen "user.txt" heißt, dann ändere Dein Script entsprechend ab. So schwer kann das doch nicht sein!

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. Hallo Felix,

      Nur hätte ich es jetzt gerne so, das das Script mir die Anzahl der Online User nicht nur aktuell auf der Seite anzeigt, sondern auch in eine user.txt schreibt.
      danke für den ellenlangen Code. Du hättest besser hineinschauen sollen, anstatt ihn hier zu posten.

      das stimmt.

      Dann hättest Du gleich in den ersten drei Zeilen gefunden, dass die Daten in eine Textdatei "besucher.txt" geschrieben werden.
      Wenn Du unbedingt willst, dass die Datei stattdessen "user.txt" heißt, dann ändere Dein Script entsprechend ab. So schwer kann das doch nicht sein!

      Nö, das ist nicht das Ziel von DiamondDog. Er möchte eine *zusätzliche* Datei haben, die einfach nur eine Zahl enthält :-)

      Freundliche Grüße

      Vinzenz

    2. Wenn Du unbedingt willst, dass die Datei stattdessen "user.txt" heißt, dann ändere Dein Script entsprechend ab. So schwer kann das doch nicht sein!

      So schlau war ich ja auch schon nur in der Txt steht nicht 1 oder 2 oder 3 sonder zB. das hier: 1219221270&&86.278.197.175&&
      Halt die Ip Adresse ich will aber nur die Aktuelle Onlinezahl in der Txt stehn haben.

      1. Hallo,

        Wenn Du unbedingt willst, dass die Datei stattdessen "user.txt" heißt, dann ändere Dein Script entsprechend ab. So schwer kann das doch nicht sein!

        So schlau war ich ja auch schon nur in der Txt steht nicht 1 oder 2 oder 3 sonder zB. das hier: 1219221270&&86.278.197.175&&
        Halt die Ip Adresse ich will aber nur die Aktuelle Onlinezahl in der Txt stehn haben.

        das derzeitige Skript zählt dazu die Zeilen der Textdatei.

        Freundliche Grüße

        Vinzenz

        1. Also ich weiß jetzt wie ich es ändern muss das es das macht was ich möchte.
          Aber das ist auch irgendwie dumm weil dann immer in der Txt steht 1 User Online auch wenn keiner Online ist.
          Gibte es nicht schon ein gutes fertiges Script irgendwo was man übernhemen könnte?
          Wäre für mich leichter dieses dann zu ändern als das ganze Script was ich habe.

          1. Hallo,

            Also ich weiß jetzt wie ich es ändern muss das es das macht was ich möchte.

            schön. Hast Du Dir meine Kommentare angeschaut und versucht, das Skript in diesem Sinne aufzuräumen? Es kann fast nur einfacher und besser werden.

            Aber das ist auch irgendwie dumm weil dann immer in der Txt steht 1 User Online auch wenn keiner Online ist.

            Überlege bitte, wann Dein Skript ausgeführt wird?
            Richtig, es kann nur ausgeführt werden, wenn irgendjemand eine Seite aufruft, in der das Skript eingebunden ist. Zumindest dieser Benutzer ist dann "online".

            Wann wird der Eintrag dieses Benutzers gelöscht?
            Richtig, wenn irgendwann wieder jemand (derzeit wahrscheinlich Du selbst) vorbeikommt. Du benötigst also ein Skript, das *nicht* davon abhängig ist, dass jemand sich auf Deinen Seiten aufhält, dafür aber regelmäßig ausgeführt wird, um aufzuräumen. So etwas leisten zum Beispiel cronjobs.

            Freundliche Grüße

            Vinzenz

            1. Also hab mir jetzt erst mal nen neues Script besorgt macht zwar genau das gleiche wie das alte aber ich glaub das ist nicht so schlecht wie das alte (hoffe ich):

                
              $f_online = "besucher.txt";  //hier werden die Daten gespeichert  
              if( file_exists($f_online) )  
              {  
                $logoutTime = 300;  
                $IP = $REMOTE_ADDR;  
                $users = 0;  
                $res = "";  
                $fp = fopen($f_online,"r");  
                $t = time();  
                $content = fread($fp,filesize($f_online));  
                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++;  
                $fp = fopen($f_online,"w");  
                fwrite ($fp,$res);  
                fclose($fp);  
              }  
              $fp2=fopen("test.txt","w");  
              fwrite($fp2,$users);  
              fclose($fp2);  
              echo $users." User online";  // User online ausgeben  
              ?>  
              
              ~~~problem ich muß halt noch das mit den cronjobs da reinbekommen damit da nit immer steht 1 User Online
              
              1. Hallo

                Also hab mir jetzt erst mal nen neues Script besorgt macht zwar genau das gleiche wie das alte aber ich glaub das ist nicht so schlecht wie das alte (hoffe ich):

                das ist schon deutlich besser. Es fehlt halt das Sperren der Datei, was Du im Artikel von Christian Seiler (hatte ich schon verlinkt) nachlesen kannst.

                Es fehlt ein else-Zweig, wenn die Zugriffsdatei noch nicht existiert, d.h. zum ersten Mal aufgerufen wird ...

                $f_online = "besucher.txt";  //hier werden die Daten gespeichert
                if( file_exists($f_online) )
                {
                  $logoutTime = 300;

                // die Folgezeile kann Probleme bereiten
                // Nutze lieber $_SERVER['REMOTE_ADDR'];
                // und kopiere nicht unnötig in eine Variable.

                $IP = $REMOTE_ADDR;
                  $users = 0;
                  $res = "";
                  $fp = fopen($f_online,"r");
                  $t = time();
                  $content = fread($fp,filesize($f_online));
                  fclose($fp);
                  $lineas = split("
                ",$content);

                // Den Zeilenumbruch kannst Du lesbarer mit "\n" darstellen.

                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++;
                  $fp = fopen($f_online,"w");
                  fwrite ($fp,$res);
                  fclose($fp);
                }
                $fp2=fopen("test.txt","w");
                fwrite($fp2,$users);
                fclose($fp2);
                echo $users." User online";  // User online ausgeben
                ?>

                  
                Beim normalen Shared Hosting steht Dir in vielen Fällen kein cronjob zur Verfügung. Du könntest Dir allerdings auch ein einfaches Aufräumskript schreiben, das Du z.B. über wget regelmäßig (hier können Dir unter Windows die geplanten Tasks helfen) aufrufst.  
                  
                Wenn Du Programmieren lernen willst, dann solltest Du versuchen zu verstehen, was der Code, den Du einsetzt, bewirkt. Anschließend kannst Du eigene Änderungen einbringen und so dazu lernen. Hier wäre beispielsweise das Dateisperren ein guter Ansatzpunkt.  
                  
                Bleibe nicht dort stehen, wo Du jetzt bist: für jeden Zweck irgendwo ein fertiges Skript suchen, dessen Qualität Du nicht beurteilen kannst, dessen Fehler Du nicht bereinigen kannst. Man muss nicht ständig das Rad neu erfinden, aber am Anfang des Programmierens stehen Fingerübungen wie beim Erlernen eines Musikinstrumentes. Der Code liest sich oft genauso übel wie die ersten Zupfversuche auf einer Gitarre klingen. Macht nichts, nur durch Übung kommt man weiter - und irgendwann muss man einmal anfangen, wenn man etwas später können will.  
                  
                Noch etwas: Kommentiere Deinen Code. Schreibe zuerst Kommentare, was Du tun willst. Setze es erst dann um. Sonst weißt Du in einer Woche nicht mehr, was der Code tun soll.  
                  
                  
                Freundliche Grüße  
                  
                Vinzenz
                
                1. Hab mich jetzt mal an der Dateisperre versucht und so siehts aus:

                    
                  <?php  
                  $f_online = "besucher.txt";  // hier werden die Daten gespeichert  
                  if( file_exists($f_online) )  
                  {  
                    $logoutTime = 300;  
                    $IP = $REMOTE_ADDR;  
                    $users = 0;  
                    $res = "";  
                    $fp = fopen($f_online,"r");  
                    if (!flock ($fp, LOCK_EX)) {    // Dateisperren  
                    die ('Sperren der Datei fehlgeschlagen!');// Wenn Dateisperren fehlegschlagen  
                    }  
                    $t = time();  
                    $content = fread($fp,filesize($f_online));  
                    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++;  
                    $fp = fopen($f_online,"w");  
                    fwrite ($fp,$res);  
                    fclose($fp);  
                  }  
                  echo $users." User online";  // User online ausgeben  
                  ?>  
                  
                  ~~~hoffe das das so richtig ist, also Funktionieren tut es.  
                  Jetzt muß nur noch was her was die Textdatei aufräumt, wenn kein User Online ist.  
                  Dann wäre es Perfekt zumindest für das wofür ich es brauche. ;)  
                  
                  
                  1. 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
                    
                    1. Also wenn ich jetzt alles richtig verstanden habe muß es so aussehn:

                        
                      <?php  
                      $f_online = "besucher.txt";  // hier werden die Daten gespeichert  
                      if( file_exists($f_online) ) // Prüfen ob Datei existiert  
                      {  
                        $logoutTime = 300;  
                        $IP = $REMOTE_ADDR;  
                        $users = 0;  
                        $res = "";  
                        $fp = fopen($f_online,"r"); // Öffne zum Lesen und Schreiben  
                        if (!flock ($fp, LOCK_EX)) {    // Dateisperren  
                        die ('Sperren der Datei fehlgeschlagen!');// Wenn Dateisperren fehlegschlagen  
                        }  
                        $t = time();  
                        $content = fread($fp,filesize($f_online));  
                        $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++;  
                        fseek ($fp, 0, SEEK_SET); // Dateizeiger wieder auf den Anfang  
                        ftruncate ($fp, 0); // Dateiinhalt löschen  
                        fwrite ($fp,$res);  // Datei in Txt schreiben  
                        fclose($fp); // Datei schließen  
                      }  
                      echo $users." User online";  // User online ausgeben  
                      ?>  
                      
                      

                      wie Du bei Christian nachlesen kannst, musst Du die Datei zum Lesen und Schreiben öffnen. Ab diesem Zeitpunkt darf keiner mehr die Datei lesen, auch nicht zwischendurch.

                      Hoffe das ich das richtig verstanden und umgestezt habe. Nur sicher bin ich mir nicht weil die Sperre ja nach der Datei kommt und sie somit noch gelesen werden kann oder?
                      Aber das andere müste doch soweit schon richtig sein oder?

  2. Hallo,

    ich habe da folgendes Script im Netz gefunden:

    // miserablen, umständlichen, fehlerhaften PHP-3-Uraltcode gelöscht

      
    das ist wirklich ein Wunder. Zum Glück ist Deine Seite nicht sehr stark besucht.  
      
    
    > Nur hätte ich es jetzt gerne so, das das Script mir die Anzahl der Online User nicht nur aktuell auf der Seite anzeigt, sondern auch in eine user.txt schreibt.  
    > Wäre super wenn mir jemand sagen könnte wie ich das hinbekomme.  
    > Ps: Bin noch PHP Anfänger.  
      
    gerade weil Du ein Anfänger bist, solltest Du zuallererst versuchen zu verstehen, wie das Skript arbeitet. Dazu kannst Du die einzelnen Funktionen und Konstrukte im [PHP-Handbuch](http://www.php.net/manual/de/) nachschlagen. Es gibt dort ein nützliches Suchfeld, womit Du das schnell bewerkstelligen kannst.  
      
    Wie ich bereits anmerkte ist das Script in einem miserablen Programmierstil (es sieht komplett nach PHP3 aus) gehalten, es ist fürchterlich umständlich mit viel zu vielen Dateizugriffen und setzt das Sperren von Dateien falsch ein, wie Du in [Christian Seilers Artikel](http://aktuell.de.selfhtml.org/artikel/programmiertechnik/dateisperren/) nachlesen kannst.  
      
    Ich empfehle Dir folgende Vorgehensweise:  
      
    Gehe Zeile für Zeile vor  
        Rücke den Quelltext sauber und vernünftig ein.  
        Schreibe vor jede Zeile eine Kommentarzeile, was der Code macht  
      
    Falls Du an bestimmten Stellen Verständnisschwierigkeiten hast, frage nach.  
    Mache Dir klar, warum ein einmaliges Lesen und ein einmaliges Schreiben ausreichen sollte - im Gegensatz zum vorgestellten Skript, das mindestens zweimal, gegebenenfalls tausendmal die Datei einliest und ebensooft schreibt.  
      
      
    Freundliche Grüße  
      
    Vinzenz
    
  3. Hallo

    ich habe da folgendes Script im Netz gefunden:

    ein klein wenig eingerückt und etwas kommentiert

    <?php  
        // Initialisiere ein paar Variablen  
        // Datei, auf die zugegriffen wird,  
        $daten="besucher.txt";  
      
        // aktueller Zeitpunkt als UNIX-Timestamp  
        $time = time();  
      
        // IP-Adresse, von der die aktuelle Anforderung kommt  
        // Nutze das superglobale $_SERVER-Array  
        // Noch besser: verzichte auf das Umkopieren :-)  
        $ip = getenv("REMOTE_ADDR");  
      
        // 5 Minuten Ablaufzeit  
        // Variablen in Strings zu konvertieren, um damit zu rechnen,  
        // ist extrem mieser Stil  
        $ablaufzeit = "$time"-"300";  
        // Besser und leichter lesbar wäre  
        # $ablaufzeit = $time - 300;  
      
        // Einlesen der oben angegebenen Datei in ein Array von Zeichenketten  
        // Ignoriere gegebenenfalls auftretende Fehlermeldungen  
        $pruefung = @file($daten);  
      
        // Verarbeitung der Daten (mit vielen - überflüssigen - Lese- und  
        // Schreiboperationen auf der angegebenen Datei  
      
        // 1. Schritt:  
        // Werfe alle Zeilen aus der Datei, deren Ablaufzeit vorbei ist.  
      
        // Anmerkung: while (list ... each) ist Uraltstil aus Zeiten von PHP 3  
        // Dafür gibt es foreach  
        while (list ($line_num, $line) = @each ($pruefung))  
            // Betrachte jede einzelne Zeile der Reihe nach  
            // und splitte sie am Trennzeichen "&&" auf  
            // Die Einträge wandern ins Array $zeiten  
            $zeiten = explode("&&",$line);  
      
            // Falls der erste Eintrag vor der Ablaufzeit liegt  
            if ($zeiten[0] <= $ablaufzeit) {  
                // Öffne die Datei, die bereits eingelesen in $pruefung  
                // vorliegt, erneut. Und nur zum Lesen.  
                $fp = fopen( "$daten", "r" );  
                // Lies die ganze Datei (die immer noch in $pruefung  
                // vorliegt) nochmals in die Variable $contents ein  
                $contents = fread($fp, filesize($daten));  
                // Schliesse die Datei  
                fclose($fp);  
                // Anmerkung:  
                // Seit PHP 4.3.0. könntest Du die drei Anweisungen durch den  
                // Aufruf von [link:http://www.php.net/manual/de/function.file-get-contents.php@title=file_get_contents()] ersetzen. Da der  
                // Inhalt aber sowieso schon eingelesen vorliegt, ist es unnötig,  
                // die Datei erneut einzulesen :-)  
      
                // Nun quoten wir den Inhalt der aktuellen Zeile. Wozu?  
                // Glücklicherweise gibt es gar kein Zeichen, das von quotemeta  
                // behandelt werden würde.  
                $line=quotemeta($line);  
      
                // Wir nehmen einen Leerstring  
                $string2 = "";  
      
                // Ersetze im Inhalt der Datei die gequotete Zeile,  
                // falls sie gefunden wird, durch den Leerstring.  
                // a) gibt es [link:http://www.php.net/manual/de/function.preg-replace.php@title=preg_replace()]  
                // b) sollte nichts gefunden werden, wenn gequotet werden musste  
                $replace = ereg_replace($line, $string2, $contents);  
      
                // Jetzt öffnen wir die Datei zum Schreiben  
                // Dass es nicht funktionieren könnte, wird ignoriert  
                $fh=fopen($daten, "w");  
                // Wir sperren die Datei exklusiv - uralter PHP-3-Stil  
                // Dass es zu spät ist, steht in Christians Artikel, den ich Dir  
                // schon verlinkt habe.  
                @flock($fp,2);  
      
                // und schreiben den geänderten Inhalt weg  
                // und das wiederholen wir für jede Zeile, die abgelaufen ist,  
                // statt es wenigstens in einem Rutsch zu erledigen.  
                fputs($fh, $replace);  
      
                // heben die Sperre auf  
                @flock($fp,3);  
      
                // und schließen die Datei  
                fclose($fh);  
            }  
        }  
      
        // 2. Schritt:  
        // Suche einen eventuell vorhandenen Eintrag mit der aktuellen IP-Adresse  
        // und lösche diesen Eintrag  
      
        // Wir lesen die geänderte Date erneut ein.  
        // Ignorieren, dass das fast so in $replace steht und ignorieren genauso  
        // stur gegebenenfalls auftretende Fehler  
        $ippruefung = @file($daten);  
      
        // Diese Prüfung erfolgt analog zum ersten Schritt, meine Anmerkungen  
        // gelten in gleichem Maße - ich verzichte darauf, sie zu wiederholen.  
        while (list ($line_num, $line) = @each ($ippruefung)) {  
            $ips = explode("&&",$line);  
            if($ips[1] == $ip) {  
                $fp = fopen( "$daten", "r" );  
                $contents = fread($fp, filesize($daten));  
                fclose($fp);  
                $line = quotemeta($line);  
                $string2 = "";  
                $replace = ereg_replace($line, $string2, $contents);  
                $fh=fopen($daten, "w");  
                @flock($fp,2);  
                fputs($fh, $replace);  
                @flock($fp,3);  
                fclose($fh);  
            }  
        }  
      
        // 3. Schritt  
        // Füge einen neuen Eintrag mit der akutellen IP und dem aktuellen  
        // Zeitstempel am Ende der Datei hinzu.  
        $fp = fopen("$daten", "a+");  
        flock($fp,2);  
      
        // Jeder Eintrag ist von der Form:  
        // Zeitstempel && IP-Adresse && Zeilenende  
        // ohne die Leerzeichen, die ich der Übersicht halber eingefügt habe.  
        // schreibe eine Zeile ans Ende der Datei  
        fputs ($fp, "$time&&$ip&&\n");  
        flock($fp,3);  
        // Schliesse die Datei  
        fclose ($fp);  
      
        // 4. Schritt  
        // Ermittle die Anzahl der Zeilen der Datei, das ist die Anzahl der  
        // Besucher, die derzeit "online" sind.  
        // Dazu wird die Datei schon wieder eingelesen.  
        $anzahldaten = file($daten);  
        $anzahl = count($anzahldaten);  
        echo "$anzahl User online";  
    ?>  
    
    

    Nur hätte ich es jetzt gerne so, das das Script mir die Anzahl der Online User nicht nur aktuell auf der Seite anzeigt, sondern auch in eine user.txt schreibt.

    Prinzipiell reichte es, am Ende den Inhalt der Variablen in die Datei user.txt zu schreiben. Wenn der Schreibvorgang erfolgreich war, hast Du Dein Ziel erreicht. Allerdings wäre es doch ein guter Ansatz, das Skript hier sauber zu überarbeiten. - Dabei solltest Du  Dir überlegen, wie Du die Einzelschritte cleverer und übersichtlicher gemäß dem

    E ingabe
      V erarbeitung
      A usgabe

    EVA-Prinzip gestalten kannst. Ein schönes Projekt, um den Einstieg in eine Programmiersprache wie PHP zu schaffen. Viel Erfolg!

    Freundliche Grüße

    Vinzenz