- Im Beispiel wird über einen Klick auf einen Download-Button ein Script abgearbeitet, welches aus einem, für den Benutzer von außen nicht sichtbaren, Verzeichnis einen Dateidownload startet.
- Beispiel für eine HTML-Datei, die download.php?f=$filename aufruft:
$filename = "myfile.gif";
echo "<form method="post" action="download.php?f=".$filename.">\n";
echo " <input type="submit" name="btn_download" class="button" value="Download">\n";
echo "</form>\n";
- Beispiel für die download.php, die die Datei aus einem Verzeichnis liefert:
// übergebenen Dateinamen aus der GET-Variablen holen
$filename = $_GET["f"];
// Pfad zur Datei zusammenbauen
$downloadfile = "../".$filename;
// Content type sollte Datei spezifisch übergeben werden
// nähere Infos siehe: http://de.selfhtml.org/diverses/mimetypen.htm
$content_type = "image/jpeg";
// Dateiname sollte nicht leer sein
if (!empty($filename))
{
// Dateiname darf keine Slashes enthalten, um zu verhindern, dass
// Dateien aus anderen Verzeichnissen vom Server geladen werden können
if (!preg_match('=/=', $filename))
{
// wenn Datei vorhanden
if (file_exists($downloadfile))
{
$filesize = filesize($downloadfile);
// Header-Infos für den Browser zusammenbauen
header("Content-Description: File Transfer");
header("Content-Type: ".$content_type);
header("Content-Disposition: attachment; filename='".$filename."'");
header("Content-Length: ".$filesize."");
// Datei liefern
readfile($downloadfile);
}
else
{
echo "Datei nicht vorhanden: ".$filename."\n";
}
}
else
{
echo "Dateiname enthält slashes, das ist aus Sicherheitsgründen nicht erlaubt.\n";
}
}
else
{
echo "Der übergebene Dateiname ist leer.\n";
}
// hier Script abbrechen und zur ursprünglichen Datei zurückkehren
exit();