Hallo Webstreuner,
ich habe das bei mir folgendermaßen gelöst:
zunächst lege ich ein Array $Linkliste mit den zum Download angebotenen Dateien an.
Dann erzeuge ich für jeden Eintrag in der Linkliste einen Button mit dem Index des Eintrags als Name und dem Namen des Downloads als Value. Über class='linkbutton' habe ich den so formatiert, wie ich ihn optisch gerne haben will)
<?php
echo"<input type='submit' class='linkbutton' name='DLStart[$IX]' value='$File_Name'><br>";
?>
Wenn dann ein Button angeklickt wird, gehe ich mit dem Index in die Linkliste und sende die Datei. Damit gibt es keine Adresse des Downloads ind es kann entsprechend auch keine Adresse direkt eingetippt werden.
Hier der Code zur Ausgabe:
<?php
session_start();
$XX = array_keys($_POST['DLStart']); // Irgendein Link zum Download ausgewählt?
if (count($XX)!=0)
{
$ix = $XX[0];
$file = $_SESSION['Linkliste'][$ix]; // ja, Namen aus Liste holen
$dir = $_SESSION['Standardpfad'].'/';
$path_parts = pathinfo($file);
$extention = strtolower($path_parts['extension']);
$type = $_SESSION['mimetype'][$extention];
header("Content-Type: $type");
header("Content-Disposition:attachment; filename=\"$file\"");
readfile($dir.$file);
exit;
}
?>
Ich habe alle Files in einem eigenen Verzeichnis. Den Pfadnamen zum Zugriff auf die Datei habe ich unter der Sessionvariablen Standardpfad abgelegt.
Über die Funktion pathinfo() hole ich den Dateityp, mit dem ich den Mimetype der Datei aus einer Tabelle abfrage und als Header für den Download ausgebe. Die Tabelle mit den Mimetypes muss vorher angelegt werden. Ich habe da nur eine kleine Auswahl an Typen drin, weil ich nicht alle Dateitypen zum Download anbiete.
z.B. so:
$_SESSION['mimetype'] = array (
"pdf" => "application/pdf",
"doc" => "application/msword",
"gif" => "image/gif",
"jpg" => "image/jpeg",
"jpeg" => "image/jpeg",
);
Weitere Typenzuordnungen finden sich im Internet.
Wichtig ist, dass die Ausgabe (beginnend mit den beiden Header Zeilen) die erste Ausgabe eines Forms ist. Andernfalls wird dieser Header nicht akzeptiert und die Datei wird nicht ausgegeben.
Es sieht komplizierter aus, als es wirklich ist und hat den Vorteil, dass es wirklich nirgendwo eine Adresse gibt, die über manuelle Eingabe abgefragt werden könnte.
Gruß
computerschrat