Schorsch: Log Datei als html Datei anzeigen, Problem mit Steuerzeichen

Hallo,

ich habe auf meinem Root Server einen Webserver laufen, der ein Webinterface zur Bedienung meiner Spiele bereitstellt. Mit dem Webinterface starte und stoppe ich die Spieletasks, unter anderem schaue ich mir auch die Logdateien an. Die Logdatei wird vom Spiel erzeugt. Ich benutze folgendes CGI-Script um mir den letzten Teil der Datei anzuschauen:

  
#!/bin/sh  
  
echo Content-type: text/html  
echo  
  
echo "<html>"  
echo "<head>"  
echo "<style type=\"text/css\">"  
echo "body { background-image:url(/cliparts/background.jpg); background-repeat:repeat; background-attachment:fixed; }"  
echo "</style>"  
echo "</head>"  
echo "<body>"  
echo "<p align=center><font face=Arial size=4><b>"  
echo  $QUERY_STRING  
echo "</font></b></p>"  
  
echo "<pre>"  
tail -n10000 /home/schorsch/games/logs/ $QUERY_STRING  
echo "</pre>"  
echo "</body>"  
echo "</html>"  

Aufgerufen wird das Script wie folgt:

  
http://www.meinserver.de/cgi-bin/viewlog.cgi?server1.log  

Leider enthält die log Datei ab und zu auch folgendes Zeichen: "<". Ist dies der Fall wird die Seit ab dieser Stelle nicht mehr angezeigt (Browser: Firefox). Die Logdatei kann theoretisch alle ASCII Zeichen von \x01 bis \xFF beinhalten. Wie muss ich mein Script umschreiben um die Logdatei korrekt angezeigt zu bekommen?  Ich möchte vermeiden irgendetwas im Browser umzustellen. Die Lösung sollte nach Möglichkeit serverseitig erfolgen.

Ich hoffe hier kann mir jemand helfen.

Georg

  1. @@Schorsch:

    nuqneH

    Wie muss ich mein Script umschreiben um die Logdatei korrekt angezeigt zu bekommen?

    Das '<'-Zeichen entsprechend escapen.

    Qapla'

    --
    „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
  2. Tach!

    Leider enthält die log Datei ab und zu auch folgendes Zeichen: "<". Ist dies der Fall wird die Seit ab dieser Stelle nicht mehr angezeigt (Browser: Firefox).

    Logisch, < (und >, &, ", ') ist ein Zeichen mit besonderer Bedeutung in HTML. Wenn diese Zeichen im Text vorkommen, musst du sie HTML-gerecht als &lt; etc. notieren.

    Die Logdatei kann theoretisch alle ASCII Zeichen von \x01 bis \xFF beinhalten. Wie muss ich mein Script umschreiben um die Logdatei korrekt angezeigt zu bekommen?

    Irgendwas mit Zeichen ersetzen muss es werden. Nun, da du weißt, was zu tun ist, solltest du dazu auch im Netz Lösungswege finden. Suchstichwörter wären zum Beispiel: bash replace text.

    Ich möchte vermeiden irgendetwas im Browser umzustellen.

    Da wäre es auch bereits zu spät. Der Browser kann nicht raten, welche < nun HTML-Syntax und welche es nicht sein sollen. Eine Alternative wäre noch, von text/html auf text/plain umzusteigen.

    dedlfix.

  3. Hi,

    Leider enthält die log Datei ab und zu auch folgendes Zeichen: "<". Ist dies der Fall wird die Seit ab dieser Stelle nicht mehr angezeigt (Browser: Firefox). Die Logdatei kann theoretisch alle ASCII Zeichen von \x01 bis \xFF beinhalten.

    nein, ASCII definiert nur 0x00 bis 0x7F.

    Wie muss ich mein Script umschreiben um die Logdatei korrekt angezeigt zu bekommen? Ich möchte vermeiden irgendetwas im Browser umzustellen. Die Lösung sollte nach Möglichkeit serverseitig erfolgen.

    Warum brichst du dir einen ab und "verpackst" die Logdatei in HTML?
    Liefere sie doch einfach als text/plain aus.

    Ciao,
     Martin

    --
    Der geistige Horizont ist der Abstand zwischen Brett und Hirn.
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  4. Die Umsetzung des von Martin, dedlfix, Gunnar dargestellten:

    echo "Content-type: text/plain; charset=utf-8\n\n";  
    tail -n10000 /home/schorsch/games/logs/ $QUERY_STRING
    

    oder, als HTML:

    echo "<pre>";  
    tail -n10000 /home/schorsch/games/logs/ $QUERY_STRING | sed 's/</\&lt;/g' | sed 's/>/\&gt;/g';  
    echo "</pre>";
    

    Bester Weg, wenn es denn UNBEDINGT HTML sein soll:

    Datei htmlspecialchars.sed: (Leserecht reicht!)

    s/&/\&quot;/g  
    s/</\&lt;/g  
    s/>/\&gt;/g  
    s/"/\&quot;/g  
    s/'/\&#039;/g  
    
    

    Im Shell-Skript dann:

    echo "<pre>";  
    tail -n10000 /home/schorsch/games/logs/ $QUERY_STRING | sed -f htmlspecialchars.sed;  
    echo "</pre>";  
    
    

    Jörg Reinholz

    1. Datei htmlspecialchars.sed: (Leserecht reicht!)

      s/&/\&amp;/g  
      s/</\&lt;/g  
      s/>/\&gt;/g  
      s/"/\&quot;/g  
      s/'/\&#039;/g  
      
      

      Natürlich. Dann klappt es auch mit dem Ampersand korrekt.

  5. Das ging aber fix mit den Vorschlägen. Ich möchte mich ganz herzlich bei allen bedanken, die mir hier geantwortet haben. Letztlich habe ich mich für die Lösung von Jörg Reinholz entschieden, da ich schon recht gerne die Logdatei in einer HTML Version darstellen möchte,  siehe "background-image" in der CGI-Datei. Das passt dann auch zum Rest des Webinterfaces.

    Gruß
    Georg