Wie kann man mit gzip-Daten am Server komprimieren und als .gz-File zum Browser
speedy
- perl
Hallo Forum,
ich bastle gerade an einem kleinen logfile-Viewer, der die Serverlogs anzeigen und filtern kann. Nun moechte ich noch die Option anbieten, die Ergebnisse komprimiert downloaden zu koennen (da es um logs >4MB geht ist das auch sinnvoll).
In der Auslese fand ich folgendes:
<cite>
Content-type: application/x-ooo; name="DATEI.BIN"
Content-disposition: inline; filename="DATEI.BIN"
... # Daten in binaerer Form ausgeben
Muss ich diesen Header mit print ausgeben? Und wo muessen dann Umbrueche (\n) gesetzt werden?
</cite>
Die Ausgabe stelle ich mir so vor:
open (ZIP, "gzip file.log -c ");
print <ZIP>;
close ZIP;
Der Schalter -c bewirkt die Ausgabe auf STDOUT, was auch klappt. Nur leider habe ich mit dem Header fuer die binaere Ausgabe ein Problem...
Viele Gruesse
speedy
Hi,
Content-type: application/x-ooo; name="DATEI.BIN"
ohne "; name=...", sondern einfach nur den MIME-Type.
Muss ich diesen Header mit print ausgeben? Und wo muessen dann Umbrueche (\n) gesetzt werden?
Ja, und nach jeder Zeile.
Die Gesamtausgabe Deines Scripts muß folgendermaßen aussehen:
--- begin ---
Content-type: application/x-gzip
Content-disposition: inline; filename="DATEI.BIN"
Daten Daten Daten Daten Daten ...
--- end ---
Jeder Zeilenumbruch, den ich gemacht habe, mußt Du auch machen.
Nur leider habe ich mit dem Header fuer die binaere Ausgabe ein Problem...
Wenn Du mit archaischen Systemen (also Windows *g*) arbeitest, mußt Du die Umwandlung von \n in \r\n (oder umgekehrt oder so) verhindern:
binmode ZIP;
binmode STDOUT;
Ansonsten ist die Summe aller Zeilen bis zur ersten Leerzeile der Header, der Rest der Body.
Cheatah
Hallo speedy,
hier vielleicht noch ein alternativer Lösungsansatz:
system("gzip -switch archive_name file_name");
keine ahnung wir gzip genau funktioniert, aber man kann es über kommandozeile ansteuern, so kannst du dir die ganzen header und line break probleme sparen.
Gruß
Cruz
Hi Cruz,
das ist auch ein Ansatz. Man muesste die Datei halt auf jeden Fall in einen geschuetzten Bereich packen, weil Logdaten ja nicht _jeden_ was angehn. Danke fuer den Tipp, vielleicht hilft‚s...
Gruesse
speedy
moin speedy,
ich bastle gerade an einem kleinen logfile-Viewer, der die Serverlogs anzeigen und filtern kann. Nun moechte ich noch die Option anbieten, die Ergebnisse komprimiert downloaden zu koennen (da es um logs >4MB geht ist das auch sinnvoll).
Wenn ich dich recht verstehe, geht es dir darum, das log-file zu packen und danach auf die lokale Platte des Users zu bringen??
Ich lasse die Datei entsprechend packen und via sendmail an den User versenden. Damit der Browser den User nicht wegen Timeout anmault, ist es gut, wenn du den Prozess des Packens mit fork abkoppelst. (den Download der gepackten Datei würde ich auch nicht unbedingt als Link anbieten wollen)
bis dahin
Steffen D.