Roger: tail -f

moin!

kann man die ausgabe des befehls
tail -f /pfad/datei
mittels php/javascript/html im browser darstellen, oder gibt es da eine äquivalente funktion? ajax dürfte doch da sicherlich der schlüssel sein?

gruß.
roger.

--
meine freundin sagt, ich wäre neugierig.
so steht's zumindest in ihrem tagebuch.
  1. Hallo,

    Ich hör/les nur noch AJAX. AJAX verhindert keine Kriege, AJAX ist kein Allheilmittel, das was mir bei deinem Problem als Schlüssel erscheint ist die regelmässige Auffrischung der Daten beim Client, dabei _kannst_ du AJAX verwenden. Musst aber nicht, gibt genügend andere Techniken (Meta-Refresh, js-Refresh, strg-r, f5, um die zu nennen, die mir gerade einfallen).

    gruss

    --
    Swiss Army Chainsaw
    Terrorific!
    Given a cow full of milk, should the milk un-cow itself, or should the cow milk itself?
    1. moin!

      Hallo,

      Ich hör/les nur noch AJAX. AJAX verhindert keine Kriege, AJAX ist kein Allheilmittel, das was mir bei deinem Problem als Schlüssel erscheint ist die regelmässige Auffrischung der Daten beim Client, dabei _kannst_ du AJAX verwenden. Musst aber nicht, gibt genügend andere Techniken (Meta-Refresh, js-Refresh, strg-r, f5, um die zu nennen, die mir gerade einfallen).

      ja, logger bleibe.
      mir kommts auch hoch, weil das thema steht's durchgekaut wird.
      allerdings habe ich immer noch keinen echten lösungsansatz...

      gruß.
      roger.

      --
      meine freundin sagt, ich wäre neugierig.
      so steht's zumindest in ihrem tagebuch.
      1. moin!

        aua: steht's... vielleicht auch mal so: "stets"?
        steht's noch?

        gruß.
        roger.

        --
        meine freundin sagt, ich wäre neugierig.
        so steht's zumindest in ihrem tagebuch.
  2. Moi moin!

    kann man die ausgabe des befehls
    tail -f /pfad/datei
    mittels php/javascript/html im browser darstellen, oder gibt es da eine äquivalente funktion? ajax dürfte doch da sicherlich der schlüssel sein?

    "AJAX" ist ein klasse Name für einen Hund und Hunde gehören an die Leine!
    Gib bescheid, wenn Du nicht nur Dein "stets"-"steht's"-"stehts"-Problem in den Griff bekommen hast, sondern auch erkannt hast, das man mit PHP _alleine_ gleiche Funktionalität erreichen kann, ohne zusätzliche Programmaufrufe zu veranstallen!
    http://de3.php.net/manual/de/ref.filesystem.php

    Gruß aus Berlin!
    eddi

    --
    Wer Rechtschreibfehler findet, darf sie behalten.
    1. moin!

      http://de3.php.net/manual/de/ref.filesystem.php

      verstehe ich nicht. wie ich eine datei mit php öffne weiß ich doch. tail -f gibt aber fortlaufend die daten aus, die währenddessen in die selbige geschrieben werden. das ist ja der knackpunkt, den ich zu lösen versuche.

      sicherlich funktionierts mit einem stream. aber wie diesen ausgeben? wenn ich nicht jede sekunde die seite aktualisieren möchte, weil das ist nämlich nervig.

      gruß.
      roger.

      --
      meine freundin sagt, ich wäre neugierig.
      so steht's zumindest in ihrem tagebuch.
      1. Re:

        http://de3.php.net/manual/de/ref.filesystem.php

        verstehe ich nicht. wie ich eine datei mit php öffne weiß ich doch. tail -f gibt aber fortlaufend die daten aus, die währenddessen in die selbige geschrieben werden. das ist ja der knackpunkt, den ich zu lösen versuche.

        mal darüber nachgedacht, daß selbst wenn Du das Programm tail dafür nutzen wollen würdest, dieses auch nur in einen Stream schreibt?

        sicherlich funktionierts mit einem stream. aber wie diesen ausgeben? wenn ich nicht jede sekunde die seite aktualisieren möchte, weil das ist nämlich nervig.

        Da kommen wir einer Problembeschreibung doch schon mal um einen Millimeter näher. Ist "es" für einen allgemeinzugängliche Webpräsenz zur Anzeige an alle erdenklichen Browser gedacht, oder als Admintool nur für Dich mit vorhersebaren Browsern und eben deren Funktionalitäten?

        Gruß aus Berlin!
        eddi

        --
        Wer Rechtschreibfehler findet, darf sie behalten.
        1. moin!

          Da kommen wir einer Problembeschreibung doch schon mal um einen Millimeter näher. Ist "es" für einen allgemeinzugängliche Webpräsenz zur Anzeige an alle erdenklichen Browser gedacht, oder als Admintool nur für Dich mit vorhersebaren Browsern und eben deren Funktionalitäten?

          nur für mich. als bastelei.

          gruß.
          roger.

          --
          meine freundin sagt, ich wäre neugierig.
          so steht's zumindest in ihrem tagebuch.
          1. Re:

              
            <?php  
            // js.php  
            header('Content-Type: application/x-javascript');  
            if($_SERVER['QUERY_STRING']=='') exit;  
            clearstatcache();  
            $dat='stream.datei';  
            if($_SERVER['QUERY_STRING']==filesize($dat)){  
               for($i=0;$i<30;$i++){  
                  sleep(1);  
                  clearstatcache();  
                  if($_SERVER['QUERY_STRING']!=filesize($dat))  
                     break;  
               }  
               if($i==30) exit("anzeige('',".filesize($dat).")");  
            }  
              
              
            $dat=fopen($dat,'r');  
            fseek($dat,$_SERVER['QUERY_STRING']);  
            echo 'anzeige("'.fread($dat,filesize($dat)).'\n",'.filesize($dat).')';  
            fclose($dat);  
            
            
              
            <?xml version="1.0" encoding="ISO-8859-1"?>  
            <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">  
            <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">  
             <head>  
              <title>Main Admintool</title>  
              <script type="application/x-javascript">  
            //  <![CDATA[  
              function anzeige(a,b){  
               document.getElementById('anzeige').appendChild(document.createTextNode(a))  
              
               var h=document.getElementsByTagName('head')[0]  
               while(h.getElementsByTagName('script').length>0)  
                h.removeChild(h.getElementsByTagName('script')[0])  
              
               var script=document.createElement('script')  
               script.src='js.php?'+b  
               h.appendChild(script)  
              }  
            //  ]]>  
              </script>  
             </head>  
             <body onload="anzeige()">  
              <pre id="anzeige"/>  
             </body>  
            </html>  
            
            

            Gruß aus Berlin!
            eddi

            --
            Wer Rechtschreibfehler findet, darf sie behalten.
            1. moin!

              danke für das script.
              ich bin nat. erfolgreich bei dem copy&paste versuch gescheitert. folgende fehlermeldung bekomme ich in der ff js-konsole:

              syntax error
              js.php?undefined (line 1)
              anzeige("\n",)

              auf dem schirm steht nur "undefined".

              ich habe 2 dateien angelegt. einmal die js.php und einmal eine index.htm, die den unteren teil deines scriptes enthält.

              hoffe das war richtig.

              zu testzwecken will ich erst einemal eine stinknormale txt datei laden, die sich im selben verzeichnis befindet, wie die beiden erstgenannten.

              gruß.
              roger.

              --
              meine freundin sagt, ich wäre neugierig.
              so steht's zumindest in ihrem tagebuch.
              1. Re:

                  
                 <body onload="anzeige('',0)">  
                
                

                Gruß aus Berlin!
                eddi

                --
                Wer Rechtschreibfehler findet, darf sie behalten.
                1. moin!

                  <body onload="anzeige('',0)">

                    
                  das undefined ist mittlerweile wech. aber der syntax error ist leider noch da.  
                    
                  \*behoben\*  
                    
                  grund war, dass du den dateihandler genauso genannt hattest, wie die datei selbst ($dat).  
                  ich hab jetzt den handler umbenannt. bekomme aber wiederum eine fehlermeldung:  
                    
                  Fehler: unterminated string literal  
                  Quelldatei: http://server01/js.php?0  
                  Zeile: 1, Spalte: 8  
                  Quelltext:  
                  anzeige("rogertest  
                    
                  \--  
                  "rogertest" ist die erste zeile in meiner test-text-datei.  
                    
                  gruß.  
                  roger.
                  
                  -- 
                  meine freundin sagt, ich wäre neugierig.  
                  so steht's zumindest in ihrem tagebuch.
                  
                  1. moin!

                    ok, scheint wohl an den zeilenumbrüchen zu liegen, die in der datei sind. sobald ich manuell in der datei ein [enter] setze, gibt's die javascript fehlermeldung.
                    wenn ich aber hinter jedem wort einfach weiter schreibe, dann klappt das wie gewünscht :)

                    ich versteh nur das script nicht, sonst würde ich gern dran rum wurschteln. die if-abfrage in der js.php, was macht die genau? für was steht der wert 30?

                    gruß.
                    roger.

                    --
                    meine freundin sagt, ich wäre neugierig.
                    so steht's zumindest in ihrem tagebuch.
                    1. Re:

                        
                      <?php  
                      // js.php  
                      header('Content-Type: application/x-javascript');  
                      if($_SERVER['QUERY_STRING']=='') exit;  
                      clearstatcache();  
                      $dat='stream.datei';  
                      if($_SERVER['QUERY_STRING']==filesize($dat)){  
                         for($i=0;$i<30;$i++){  
                             sleep(1);  
                            clearstatcache();  
                            if($_SERVER['QUERY_STRING']!=filesize($dat))  
                               break;  
                         }  
                         if($i==30) exit("anzeige('',".filesize($dat).")");  
                      }  
                      $d=fopen($dat,'r');  
                      fseek($d,$_SERVER['QUERY_STRING']);  
                      echo 'anzeige("'.fread($d,filesize($dat)).'\n",'.filesize($dat).')';  
                      fclose($d);  
                      ?>  
                      
                      

                      In Worten:

                      senden eines HTTP-Headers
                      Prüfung, ob ein QueryString übergeben wurde und gegebenenfalls brich ab
                      Löschen des Dateiinformationscach
                      Speichern des Namens der zu überwachenden Datei/Gerät/etc.
                      Prüfung, ob die Datei größergeworden ist => wenn nein =>
                      Prüfe jede Sekunde, ob die Datei größer geworden ist, 30 Sekunden lang
                      wenn größer geworden => brich Prüfung ab
                      wenn $i==30 (30 Sekunden sind vorüber, ohne Größenveränderung der Datei) =>
                      brich ab

                      Auslesevorgang...

                      Im allgemeinen ist dies ein Böses[TM] Verfahren, weil mittels HTTP ein Quasie-Stream veranstaltet wird, wofür das Protokoll schlichtweg nicht ausgerichtet ist.

                      Gruß aus Berlin!
                      eddi

                      --
                      Wer Rechtschreibfehler findet, darf sie behalten.
                      1. moin!

                        [...]
                        Auslesevorgang...

                        ok, danke. hab's kapiert.

                        Im allgemeinen ist dies ein Böses[TM] Verfahren, weil mittels HTTP ein Quasie-Stream veranstaltet wird, wofür das Protokoll schlichtweg nicht ausgerichtet ist.

                        ja, vor allem bei größeren dateien gibt es probleme, da ja imho die datei immer wieder neu eingelesen wird.
                        für meine ersten schritte aber schonmal ein prima anfang :)

                        wie würde denn eine verbesserung dessen aussehen (angelehnt an tail -f)?

                        gruß.
                        roger.

                        --
                        meine freundin sagt, ich wäre neugierig.
                        so steht's zumindest in ihrem tagebuch.
                        1. Re:

                          ja, vor allem bei größeren dateien gibt es probleme, da ja imho die datei immer wieder neu eingelesen wird.
                          für meine ersten schritte aber schonmal ein prima anfang :)

                          Mit anderen Worten, Du hast immer noch nicht begriffen, wie das Script arbeit.

                          wie würde denn eine verbesserung dessen aussehen (angelehnt an tail -f)?

                          Bishierhin reicht die Hilfe. Ab jetzt darfst Du Deinen inneren Schweinehund mal überwinnden und eigene Überlegungen anstellen. (Kleiner Tipp: seek())

                          Gruß aus Berlin!
                          eddi

                          --
                          Wer Rechtschreibfehler findet, darf sie behalten.
                          1. moin!

                            ok, fseek() hatte ich bisher außen vor gelassen. mein fehler. aber ich lerne ja noch :)
                            es hat mich eben verwundert, wieso aus dem angegebenen logfile beim test nichts ausgegeben wurde, außer die dateigröße (beim direkten aufruf von js.php). wo liegt denn dann der fehler?

                            gruß.
                            roger.

                            --
                            meine freundin sagt, ich wäre neugierig.
                            so steht's zumindest in ihrem tagebuch.