Facebook
Twitter
Google+
Kommentare
1

Froscon 2008 – Deliver Files with PHP

Der erste Vortrag, den ich mit auf der Froscon angehen hatte, war von Thomas Weinert. Das Thema war Deliver Files with PHP und wenn ich ehrlich bin hatte ich anfänglich keine Ahnung, um was sich dieser Vortrag drehen wird. Ich war mir sicher, dass es nicht einfach ein Vortrag über Dateiausgabe an den Browser geht, die irgendwie durch PHP durchgeschleust oder erstellt wurden. Aber um dieses Thema ging dieser Vortrag wirklich. Für mich war es anfänglich sehr schwer wirklich etwas aus diesem Vortrag mitzunehmen, bis Thomas anfing die kleinen Optimierungsschrauben zu erwähnen, an denen man drehen sollte, wenn man Dateien überträgt und jetzt fing es dann zum Glück doch noch an interessant zu werden.

Hauptsächlich waren diese Optimierungen bezogen auf Header, die man mitsenden sollte, wenn man größere Dateien überträgt. Darunter waren unter anderem die folgenden HTTP Header:

  • content disposition header – Dieser Header sollte verwenden werden, wenn man sicherstellen will, dass der Browser die Datei, die man angibt aus downloaded und nicht anzeigt. Dafür verwendet ihr einfach in PHP die Zeile:
    header("Content-Disposition: attachment; filename=datei.pdf");
    Jetzt weiß der Browser, dass er diese Seite nicht anzeigen muss sondern es sich um einen Download handelt.
  • expire date und last change – Möchte man die Anzahl der Downloads minimieren, so kann man einfach diese zwei Header verwenden. Obwohl die Namen schon selbstredend sind gehe ich nochmal ganz kurz drauf ein. Beim expire date, kann man dem Browser mitteilen, bis wann ein File gültig ist. Der Browser Cache sollte also diese Datei bis zu einem bestimmten Datum vorhalten und danach erst wieder beim Webserver nachfragen, wie es denn mit einer neuen Datei aussieht. Last Change funktioniert ähnlich, nur dass hier einer Datei Datum mitgegeben wird, an dem sie das letzt emal geändert wurde. Der Browser hat also die Möglichkeit nur den Header, was in HTTP Standard vorgesehen ist, abzuholen, um dann selbst zu entscheiden, ob er die ganze Datei haben muss oder nicht.
  • filesize – Ein sehr nettes Header Attribut ist auch die Dateigröße, die man dem Browser mitgeben kann. Natürlich wird nichts schneller auf diese Art, aber gibt dem Browser aber die Möglichkeit wirklich anzuzeigen, wie lange der Download noch gehen wird. Da der User diesen Fortschrittsbalken von statischen Dateien kennt, sollte man ihm diesen Luxus auch bei dynamischen Dateien gönnen.
  • range header -Der komplexeste dieser Header, die vorgestellt wurden, war sicherlich der range header. Aus diesem Grund will ich hier auch nur kurz auf de Aufgaben dieses Header eingehen, ohne dabei jedes Detail zu beschreiben, was auch besser so ist, da ich diesen header noch nie angewandt habe. Prinzipiell ist dieser Header zu verwenden, wenn man eine Datei nicht komplett, sondern in Stücken übertragen will, was bei großen Dateien sinnvoll sein kann.

Die Idee Dateien in mehrer Stücke zu übertragen ist natürlich nicht neu. Trotzdem fand ich die Idee ganz interessant und die Ansätze, die Weinert vorgestellt hat sehr einleuchtend. Nehmen wir an, wir müssen ein Video übertragen. Dann haben wir bei der Zerstückelung die Möglichkeit die ersten Teile des Videos mit einer höheren Bandbreite zu verwenden als den Rest. Auf diese Art sparen wir Bandbreite, da nicht jeder die Videos, die er ansieht auch zu ende schaut. Trotzdem kann jeder, der ein Video ansehen will dies ohne Ruckeln tun, da immer genug Teile des Videos auf dem eigenen Rechner sind.

Um Dateien nach und nach zu übertragen muss man in PHP ab und zu den Output Buffer flushen. Dies könnt ihr ganz einfach über den Befehl flush() erreichen. Dabei müsst ihr aber drauf achten, dass es PHP Befehle und Einstellungen gibt, die dies verhindern können. Dabei seien nur ob_start, session.use_trans_id oder die output compression zu nennen.

So mehr habe ich nicht aus dem Vortrag mitnehmen können. Ich denke es waren ein paar nette Denkansätze dabei und hoffe, das der ein oder andere sich inspiriert fühlt.

Über den Autor

Nils Langner

Nils Langner ist der Gründer von "the web hates me" und auch der Hauptautor. Im wahren Leben leitet er das Qualitätsmanagementteam im Gruner+Jahr-Digitalbereich und ist somit für Seiten wie stern.de, eltern.de und gala.de aus Qualitätssicht verantwortlich. Nils schreibt seit den Anfängen von phphatesme, welches er ebenfalls gegründet hat, nicht nur für diverse Blogs, sondern auch für Fachmagazine, wie das PHP Magazin, die t3n, die c't oder die iX. Nebenbei ist er noch ein gern gesehener Sprecher auf Konferenzen. Herr Langner schreibt die Texte über sich gerne in der dritten Form.
Kommentare

1 Comments

Leave a Comment.

Link erfolgreich vorgeschlagen.

Vielen Dank, dass du einen Link vorgeschlagen hast. Wir werden ihn sobald wie möglich prüfen. Schließen