Johann: Download-Script

Beitrag lesen

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