Zitat:
Zitat von jans download.php PHP-Code: $file = @$_GET["file"]; $dir = @$_GET["dir"];
if(!$file || !$dir) { header("Location: index.php"); exit(); } if(!file_exists("downloads/".$dir."/".$file)) { echo "<b><font color='red'>Die Datei existiert nicht (mehr)</font></b>"; exit(); }
$file = "downloads/".$dir."/".$file; $name = basename($file); $size = filesize("downloads/".$dir."/".); header("Content-Type: application/force-download"); header("Content-Disposition: attachment; filename=".$name); header("Content-Length:".$groesse); readfile($file);
index.php PHP-Code: <a href='download.php?dir=xyz&file=xyz.doc'>Jetzt Downloaden!</a>
Natürlich musst du die xyz und xyz.doc dementsprechend ändern.
Der download.php musst du immer ?dir=[ORDNER]&file=[Datei-Name] übergeben |
Würde ich von abraten, zum einen wird dein Script versagen, sobald eine Datei das Speicherlimit von PHP übersteigt(es gibt einige gute Alternativscripts im Manual zu readfile(), die mit jeglicher Dateigröße und mit HTTP-RANGE bzw. Apache-Methoden klarkommen), zum anderen würde ich mir überlegen, was passiert, wenn du z.B. folgenden Link aufrufst.
Code:
download.php?dir=../../../../etc&file=passwd
Zum anderen sollte dein Script einen Parse-Error hervorbringen
PHP-Code:
$size = filesize("downloads/".$dir."/".);
Auch empfinde ich sowas hier persönlich als äußerst unschon(Fehler sollte man nur dort unterdrücken, wo es wirklich keinen anderen Weg gibt).
PHP-Code:
$file = @$_GET["file"];
$dir = @$_GET["dir"];
Warum nicht ordentlich und etwas in Richtung
PHP-Code:
$file = (isset/!empty($_GET['file'])) ? $_GET['file'] : false;
Außerdem buggt "force-download" angeblich im IE < 8, also wurde ich hier auch eher auf eine Alternative ausweichen.
btw. Hinter das readfile sollte ein exit() bzw. sollte dafür gesorgt werden, das es keinen schließenden PHP-Tag gibt, ansonsten laden eventuelle Leerzeichen mit in der Datei und sie wird unbrauchbar.