Wenn man eine Datei direkt an den Browser senden möchte, um sie zu speichern, muss man lediglich zwei Zeilen in seinen PHP-Code einfügen. Dadurch öffnet sich beim Besucher der Webseite das Menü zum Speichern der Datei. Dies passiert auch bei Bildern, die nicht gezippt sind.

Zu erst müssen wir dem Browser erklären, dass jetzt eine Datei zum Speichern geschickt wird. Hierfür wenden wir folgende Zeile:

header('Content-Disposition: attachment; filename=datei.jpg');

Durch Content-Disposition: attachment; wird dem Browser klargemacht, dass jetzt ein Anhang kommt. Dieser öffnet dann ein Menü zum Speichern der Datei. Mit filename=datei.jpg kann man den Dateinamen festlegen, der dem Besucher dann angezeigt werden soll. Wenn man dieses nicht tut, dann erscheint standardmäßig der Dateiname der PHP-Datei und das sieht nicht so schön aus. Der Name kann trotz Vorgabe natürlich vom Besucher verändert werden.

Als zweite Zeile verwenden wir noch folgende Zeile, damit wir dem Browser übermitteln können, um welche Art es sich bei der Datei handelt.

header('Content-type: image/jpeg');

Weitere Dateitypen können ausgewählt werden:

header('Content-type: image/jpeg'); // für JPG-Bilder
header('Content-type: image/gif'); // für GIF-Bilder
header('Content-type: image/png'); // für PNG-Bilder
header('Content-Type: application/pdf'); // für PDF-Dokumente
header('Content-Type: application/octet-stream'); // für unbekannte Medientypen

Nach diesen beiden muss nur noch die Datei ausgegeben werden und schon ist das Script fertig.

Probleme mit der SSL-Verbindung

Verwendet man das oben genannte Script bei einer SSL-Verschlüsselung, so funktioniert dies leider im IE6 nicht. Der Browser gibt dann folgende Meldung auf dem Bildschirm aus:

Die Datei konnte nicht in den Zwischenspeicher geschrieben werden

Damit der Internet Explorer die Dateien auch bei einer SSL-Verbindung erhalten kann, muss dem Browser mitgeteilt werden, dass er nichts zwischenspeichern darf. Dies erfolgt durch zwei Angaben im Header. Sie sehen wie folgt aus:

header('Cache-Control:');
header('Pragma:');

Es ist beabsichtigt, dass die Angaben hinter dem Doppelpunkt jeweils leer sind. Hat man diese beiden Zeilen ergänzt, so meckert der IE6 auch nicht mehr rum, wenn man bei einer SSL-Verschlüsselung die Datei an den Browser sendet.