In den grauen frühen Tagen, als das Internet noch als Tummelplatz für mehr oder minder Eingeweihte herhalten musste, in jenen Tagen war ein Download eine klare Sache. Das herunterzuladende Objekt lag auf einem FTP-Server, wurde (durchaus bereits im ordinären Web-Browser) mittels ftp://ftp.download_url angesprochen und jedem Beteiligten – insbesondere dem besagten Web-Browser – war zweifelsfrei klar: hier wird jetzt nicht herumgekaspert, sondern heruntergeladen. Dazu kam, dass ohnehin höchst selten etwas zum Herunterladen angeboten wurde, das nicht zu irgendeiner Art von Archiv zusammengepackt war, schließlich war Webspace noch ein knappes Gut und die Bandbreiten bescheiden.
Einen FTP-Server im eigentlichen Sinne betreibt heute fast niemand mehr, und wer Daten zum Download zur Verfügung stellt, verfügt sie auf den Server und spricht sie mit einem ganz normalen http://download_url an. Auch Daten in Archive zu packen, kommt nur noch wenigen in den Sinn, schließlich ist Webspace längst ein inflationär verfügbares Gut und die Bandbreiten endlos.
Die Kombination aus beiden Gepflogenheiten hat leider einige Unwägbarkeiten zur Folge. Beispielsweise kann sich keiner sicher sein, was passiert, wenn er eine offene Word-Datei oder ein PDF zur Verfügung stellt. Je nach Umgebung bzw. Einstellung ist es gut möglich, dass der Browser versucht, die Datei selbst abzubilden (und losquäkt, wenn er irgendwann merkt, dass er es nicht hinbekommt) oder er startet eifrig Word (oder Acrobat oder irgendein anderes »Hilfsprogramm«), was nicht jeden Downloadwilligen vor Freude taumeln lassen wird. Häufig anzutreffen sind auch downloadbare JPG-Bilder, die sich nach dem Klick auf die Vorschau in voller Pracht in Zusatzfenstern öffnen und von weitschweifigen Erklärungen à la »Klicken Sie mit der rechten Maustaste auf das Bild und wählen Sie ›Sichern unter …‹ im Kontextmenu etc.« begleitet werden. Solange wir über eine Datei reden, mag das noch angehen, spätestens bei mittleren Listen wird der Geduldsfaden freilich bald reißen.
Wer aus irgendwelchen Gründen keine ZIP-Archive o. ä. anbieten will (z. B. weil Google sie im Gegensatz zu PDFs nicht auswerten kann) der kann sich mit einem kleinen PHP-Skript behelfen, das einen Download erzwingt – unabhängig von der Art der Datei und dem verwendeten Web-Browser.
Das Skript kann als normale PHP-Datei irgendwo auf dem Server abgelegt werden. Statt nun wie bislang mit
<a href="http://download_url">Runterladen</a>
zu starten, wird das Skript angesprochen und der URL als Parameter mitgegeben:
<a href="http://skript_url.php?file=datei_name">Runterladen</a>
Das Skript wertet den empfangenen Parameter aus und schreibt einen http-Header, der den sofortigen Download des Files bewirkt. Hier das komplette Skript zum Abgreifen:
<?php
// Pfad empfangen, ansonsten abbrechen
if ($_GET["file"]) $file = $_GET["file"]; else exit();
// eventuell eingegebene Slashes entfernen
$file = preg_replace("/\//", "", $file);
// Download-Pfad zusammensetzen
$dl_pfad = "pfad_zum_downloadverzeichnis/";
$dl_url = $dl_pfad.$file;
// Existenz der Datei überprüfen
if(is_file($dl_url)) {
// Dateiname u. -größe für den Header ermitteln
$file_name = basename($dl_url);
$file_size = filesize($dl_url);
// Header schreiben
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=$file_name");
header("Content-Transfer-Encoding: binary");
header("Content-Length: $file_size");
readfile($dl_url);
} else exit();
?>