phpbar.de logo

Mailinglisten-Archive

[php] "tail -f" unter php3 nachbilden

[php] "tail -f" unter php3 nachbilden

Thomas 'Balu' Walter tw_(at)_iTreff.DE
Fri, 12 Nov 1999 12:05:09 +0100


+--[Peter Blancke <blancke_(at)_gmx.de>]---[11.11.99]--------------------------------
| Nun ueberlege ich, wie ich die "tail -f"-Aufgabe unter php3 loese. In
| irgend einer Form muesste da so ca. alle Sekunde eine Art Refresh
| erfolgen, so dass der Browser aktualisiert.

Wie waere es mit "Streaming" (Wenn Du das Archiv durchwuehlst, wirst Du
feststellen, dass ich vor einiger Zeit schonmal die gleiche Frage gestellt
habe - ich habe mir fuer meinen Chat eine eigene Loesung gemacht,... - die
ich demnaechst sowieso hier posten wollte :-) - nur wollte ich das etwas
besser dokumentieren...
 
Man kann nicht einfach ein system("tail -f") an den Browser
durchzuschleifen, da die tails nicht beendet werden, wenn der Benutzer
die Verbindung abbricht.

Also habe ich mir was mit PHP basteln muessen. Vielleicht versteht ja der
eine oder andere, was ich im folgenden mache - wenn etwas unklar ist -> PM
an mich 8o) (aber erstmal RTFM ;) - achso - es ist natuerlich nicht ohne
Modifikationen verwendbar 8):

----- 8< ----- 8< ----- 8< ----- 8< ----- 8< ----- 8< ----- 8< -----

function ChatStream($ChatUser, $ChatRoom){
  ignore_user_abort(1); // Don't kill the script if disconnected...
  $PingTime=1;
  $Ping=0;

  $lastpos=filesize($ChatRoom) 
    or die("Unable to get the filesize of".$ChatRoom

  while(!connection_aborted()){
    clearstatcache(); // to clear the file-status-cache...

    if ($lastpos<filesize($ChatRoom)){ // Something was added!
      $fp=fopen($ChatRoom, "r");
      fseek($fp, $lastpos); // set file-pointer to last read position
      fpassthru($fp) 
        or die("Unable to fpassthru (whatever this means ;)<br>\n"
      $lastpos=filesize($ChatRoom);
    }

    if ($Ping>0)
      $Ping--;
    else {
      $Ping=$PingTime;
      echo " ";
    }
    flush();
    usleep(500000); // interval of half a second is fast enough...

  }
  Chat("<i>[Notification] ".$ChatUser." left ".$ChatRoom."</i><br>");
  flush();
}

----- 8< ----- 8< ----- 8< ----- 8< ----- 8< ----- 8< ----- 8< -----

Eingebaut wird das ganze so: (um automatisches Scrolling hinzbekommen mit
Jscript)

----- 8< ----- 8< ----- 8< ----- 8< ----- 8< ----- 8< ----- 8< -----

<?php
  // Include the defaults...
  require("common.inc.php3");
  ignore_user_abort(1);
?>


  MicroChat

  




MicroChat (c) 1999 by Thomas "Balu" Walter