Datei Download mit PHP realisieren

Kannst du eigentlich zählen wie oft du schon eine Datei gedownloadet hast? Mit Sicherheit nicht, es sei denn du nimmst dir genügend Zeit oder nutzt dafür ein Tool. Es gibt solche und solche Möglichkeiten etwas zu downloaden. Zunächst möchte ich nun darauf eingehen.

Die verschiedenen Möglichkeiten eines Downloads

Man kann es mit Sicherheit noch genauer unterteilen und vielleicht gibt es auch noch weitere Möglichkeiten, ich möchte in diesem Artikel jedoch hauptsächlich zwischen den folgenden beiden Download Möglichkeiten unterscheiden:

  • Download mit PHP
    Bei dem Download mit PHP wird dem Browser des Nutzers via header() mitgeteilt, dass dieser eine Datei downloaden soll, wo er diese findet, welchen Inhalt sie hat und wie groß sie ist. So zumindest im Optimalfall. Dies ist relativ einfach zu realisieren, sodass ich euch in den nächsten Absätzen einen Beispielcode zeigen werde.
  • (Anderer) Download durch Nutzer/Browser
    Es gibt immer noch genug Websites die dem Nutzer zum Beispiel den Download von einem Bild anbieten und zwar so: „Wenn du das Bild downloaden willst, klicke bitte mit der rechten Maustaste darauf und anschließend auf ‚Grafik speichern unter'“. Natürlich gibt es hier auch noch weitere Möglichkeiten wie zum Beispiel das Speichern von einem PDF-Dokument. Dies ist aber alles nicht sehr elegant.

Der Download mit PHP

Doch was ist dann elegant? Nun, ganz einfach der Download mit PHP. Dieser hat auch viele weitere Vorteile, so kannst du vorher auch noch direkt prüfen ob der Nutzer eingeloggt ist oder sonstigen PHP Code ausführen. Es darf auf der unmittelbaren Download-Seite lediglich kein Text ausgegeben werden.

Zu der Zeit, als Du bei WWW Coding noch Tools (heute hier zu finden) nutzen konntest, gab es dort eine download.php. Dadurch, dass zuvor PHP Code ausgeführt werden kann, konnten wir dir genau den richtigen Download zuteilen. So erhälst du, wenn du zum Beispiel den GIF Generator, den Massen Bild Editor oder den FavIcon Generator genutzt hast, genau deine Bilddatei und nicht die eines anderen.

Kommen wir nun zum eher praktischen Teil dieses Artikels, dem Beispiel. Ein ganz einfacher und funktionierender Datei-Upload könnte so aussehen:
$file = "datei/pfad/datei123.xml";
header("Content-Type: text/xml");
header("Content-Disposition: attachment; filename=datei.xml");
header("Content-Length: ". filesize($file));
readfile($file);

In der Variable $file wird der Pfad zur Datei angegeben. In diesem Beispiel handelt es sich um eine XML-Datei. Dies teilen wir auch dem Browser durch den in der nächsten Zeile folgenden Content-Type mit (text/xml).Zur korrekten Verarbeitung durch den Browser – damit die Datei zum Beispiel mit dem gewünschten Programm geöffnet wird – solltest du hier auch den richtigen Content-Type angeben, dazu jedoch später mehr.

Mit Content-Disposition sagen wir dem Browser was er mit der Datei anstellen soll, nämlich sie downloaden („attachment“), und wie die Datei dann heißen soll (filename).Das kann zum Beispiel dann hilfreich sein, wenn die Datei auf dem Server einen eher verwirrenden oder unpassenden Namen hat, bei dem Download des Nutzers sieht er davon dann allerdings nichts mehr.

Nun kommen wir zu einem ganz interessanten Teil. Kennst du das, wenn dein Browser bei einem Download nicht berechnen kann, wie lange der Download braucht? Das liegt daran, dass ihm die Dateigröße nicht mittels Content-Length übermittelt wurde. Daher empfiehlt sich diese Zeile definitiv mit anzugeben, denn um die Dateigröße zu ermitteln hält PHP schon die passende Funktion bereit: filesize() ermittelt die Dateigröße von $file.

Wichtig ist es nun, dass wir die Datei auslesen und somit downloaden lassen. Dies können wir mit readfile() machen. Und fertig ist das eigene Download Skript. Im nächsten Abschnitt geht es nun noch um eine Auflistung verschiedener Dateitypen und der zugehörigen Content-Types.

Die Content-Typen für verschiedene Dateitypen

XML text/xml
PDF application/pdf
CSV application/csv
TXT application/txt
GIF image/gif
PNG image/png
JP(E)G image/jpeg
ZIP application/zip
HTML text/html
DOC application/msword
EXE application/exe
Unbekannt application/octet-stream

Noch mehr? 30 Dateitypen wurden in diesem Beitrag gesammelt.

Ein Gedanke zu „Datei Download mit PHP realisieren“

  1. Hi
    gibts eventuell genaue anleitung —wie das funktioniert ?
    ich will eine datei. Muster.txt von meiner Homepage auf meinen Rechner laden.
    C:\muster.txt

    danke gruss roland