Hallo,
ich habe ein einfaches Download-Script gefunden, was ich für meine Seite verwenden möchte.
Die Beschreibung war für meine nicht so guten PHP-Kenntnisse teilweise nicht ausreichend.
Kann mir wer weiterhelfen ?
Die Zeilen mit den // davor sind originalbeschreibung
Originalscript:
// $download sei der Bezeichner für die zu ladende Datei
// etwa:
$download = $_GET['download'];
Frage 1: Soll ich also das Scipt, nennen wir es download.php, mit z.B. download.php?download=file2 aufrufen?
// Dieses Verzeichnis liegt außerhalb des Document Root und
// ist nicht per URL erreichbar.
$basedir = "/home/www/download";
Frage 2: Was heißt per URL nicht erreichbar? Ist damit gemeint das man einfach so nicht auf den Pfad kommt, oder soll das Verzeichnis irgendwie geschützt werden, z.B. mit .htaccess ?
// Ü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]);
Frage 3: printf() kenne ich. das ist so wie echo(), bloß das die Ausgabe formatiert wird. Was aber soll das "s" davor?
// 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"");
Frage 4: Bedeutet die Zeile mit basename(), das der Dateiname aus dem Pfadnamen extrahiert wird und dann in $save_as_name geschrieben wird ? Wenn ja , wie erkennt dann der nachfolgende header den richtigen Pfad ?
// Datei ausgeben.
readfile($filename);
mfg
Johann