Log Datei als html Datei anzeigen, Problem mit Steuerzeichen
Schorsch
- html
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
@@Schorsch:
nuqneH
Wie muss ich mein Script umschreiben um die Logdatei korrekt angezeigt zu bekommen?
Das '<'-Zeichen entsprechend escapen.
Qapla'
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 < 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.
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
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/</\</g' | sed 's/>/\>/g';
echo "</pre>";
Bester Weg, wenn es denn UNBEDINGT HTML sein soll:
Datei htmlspecialchars.sed: (Leserecht reicht!)
s/&/\"/g
s/</\</g
s/>/\>/g
s/"/\"/g
s/'/\'/g
Im Shell-Skript dann:
echo "<pre>";
tail -n10000 /home/schorsch/games/logs/ $QUERY_STRING | sed -f htmlspecialchars.sed;
echo "</pre>";
Jörg Reinholz
Datei htmlspecialchars.sed: (Leserecht reicht!)
s/&/\&/g
s/</\</g
s/>/\>/g
s/"/\"/g
s/'/\'/g
Natürlich. Dann klappt es auch mit dem Ampersand korrekt.
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