Hauptmenü

Untermenü

PHP/MySQL - Header - Dateien

1. Die Abschnitte

2. Warum

Bei den kleinen Beispielen habt ihr ja zum Schluss (hoffentlich) gelernt, dass es schon große Unterschiede bei Textformaten gibt. Bei anderen Dateitypen ist das noch viel wichtiger, wenn man sie ebenfalls direkt versendet. Also wenn man zum Beispiel Bilder aus einer Datenbank holt oder PDF-Dateien zur Laufzeit generiert.

3. Ein Bild

Der Einfachheit halber ziehen wir uns das in diesem Beispiel mittels file_get_contents. Es könnte aber auch aus einer Datenbank kommen oder, wie auch immer, von einem entfernten Server geholt worden sein. Zur Anschauung gibt es dazu im Ordner dateien die Datei bilder.php. Also! Ein simples


<?php
  $jpg file_get_contents('moi.jpg');
  echo $jpg;
?>

führt zu einem grässlichen Buchstabensalat im Browser. Warum? Ganz einfach, bei dem Bild von meiner Wenigkeit auf der Arbeit handelt es sich um eine Binärdatei, die in diesem Beispiel vom Browser als ein String (Text/Zeichenkette) interpretiert wird. Denn file_get_contents öffnet einfach die Datei und liest den Inhalt ein.

Die Spaßbremse

... namens Internet Explorer stellt das Bild trotzdem korrekt dar. Denn der probiert einfach alles mögliche aus, bis es passt. Und das macht diesen Browser meiner Meinung nach auch so gefährlich. Der fängt an zu raten.

Damit es aber richtig dargestellt werden kann, muss der "normale" Browser wissen, um was es sich handelt. Und darum senden wir vorher auch den entsprechenden Header, der da lautet.


<?php
  header('Content-Type: image/jpeg');
  ...
?>

Erläuterung

Mit Content-Type teilt man dem Browser mit, dass jetzt ein bestimmter Dateityp kommt. Zuerst legte man mit image fest, dass es sich dabei um ein Bild handelt, um dann per jpeg dessen Typ anzugeben. Was nun kommt, hängt von den browsereigenen Einstellungen ab. Normalerweise solltet ihr das Bild jetzt zu Gesicht bekommen. Wenn etwas Anderes passiert, so geduldet euch ein wenig, darauf gehe ich im nächsten Abschnitt ein.

4. Ein PDF

Nachdem ihr obiges Beispiel verstanden habt, ist das Folgende eigentlich Pillepups. Und obendrein nahezu identisch, nur wählen wir diesmal einen anderen Content-Type. Nehmt dazu einfach die Datei pdf.php im selben Ordner.


<?php
  header('Content-Type: application/pdf');
  $pdf file_get_contents('test.pdf');
  echo $pdf;
?>

Aber!

Jetzt gibt es zwei Möglichkeiten, wie der Browser reagiert. Wenn ihr das entsprechen Plugin des Acrobat (Readers) installiert habt, so sollte sich die PDF-Datei direkt im Browser öffnen. Anderenfalls weiß der Browser nichts damit anzufangen und bietet die Datei zum Download an. Darüber hinaus könnte es noch eine dritte Möglichkeit bei alternativen PDF-Readern geben, aber das hängt von individuellen Einstellungen ab, also gehe ich da jetzt nicht darauf ein.

zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt