Julian Hofmann: Dateidownload

Beitrag lesen

Hallo.

Ok, gehen wir mal eben den Code (http://www.dclp-faq.de/q/q-datei-download.html) durch mit paar Kommentaren mehr und etwas auf Dich zugeschnittener.
Wir wollen die Datei blablub.jpg aus dem Verzeichnis c:/apache/geheim/ zum Download anbieten und blubber.gif aus c:/apache/geheim/test/

// $download sei der Bezeichner für die zu ladende Datei.
// Als Bezeichner wählen wir 'bla' bzw. 'blubber'.
$download = $_GET['download'];

// Dieses Verzeichnis liegt außerhalb des Document Root und
// ist nicht per URL erreichbar.
$basedir = "c:/apache/geheim";

// Übersetzung von Download-Bezeichner in Dateinamen.
$filelist = array(
  "bla" => "blablub.jpg",
  "blubber" => "test/blubber.gif"
);

// Einbruchsversuch abfangen. D.h. alles was wir nicht explizit als Download im Array benannt haben, löst eine Fehlermeldung aus.
if (!isset($filelist[$download]))
  die("Datei $download nicht vorhanden.");

// Wenn soweit alles ok, erzeugen wir die nötigen Header damit die Datein nicht vom Browser geöffnet wird (Wollen ja einen Speicherdialog) und liefern die Datei an den Browser aus.

// Vertrauenswürdigen Dateinamen basteln.
$filename = sprintf("%s/%s", $basedir, $filelist[$download]);

// Passenden Datentyp erzeugen.
header("Content-Type: application/octet-stream");

// Passenden Dateinamen im Download-Requester vorgeben,
// z. B. den Original-Dateinamen
$save_as_name = basename($filelist[$download]);
header("Content-Disposition: attachment; filename="$save_as_name"");

// Datei ausgeben.
readfile($filename);

Grüße aus Würzburg
Julian

--
"machines will eat itself." Bau Dir Deinen eigenen Bot.
http://www.hgb-leipzig.de:83/~franz/hyperportrait/testers/