Hallo!
Ich habe mit hiermit eine download.php gebastelt:
Natürlich habe ich das Script so angepasst, dass es einzeln funktioniert. Ich habe noch eine Abfrage reingepackt, damit der Download nur geht, wenn die download.php in meine Seite included wird. Wenn diese Seite allerdings included wird und man eine Datei herunterladen will, wird die Datei nicht heruntergeladen, der Browser versucht sie stattdessen direkt im Browser zu öffnen, was dann in wirren Buchstaben und Ziffern endet. Ich habe es schon mit verschiedenen Content Types versucht, aber ich finde einfach keine Lösung. Habt ihr eine Idee?
Ich habe mit hiermit eine download.php gebastelt:
Code:
// $download sei der Bezeichner für die zu ladende Datei
// etwa:
$download = $_GET['download'];
// Dieses Verzeichnis liegt außerhalb des Document Root und
// ist nicht per URL erreichbar.
$basedir = "/home/www/download";
// Übersetzung von Download-Bezeichner in Dateinamen.
$filelist = array(
"file1" => "area1/datei1.zip",
"file2" => "area1/datei2.zip",
"file3" => "area2/datei1.zip"
);
// Einbruchsversuch abfangen.
if (!isset($filelist[$download]))
die("Datei $download nicht vorhanden.");
// 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);