<?php
//Angiver mappen hvori alle dokumenter er placeret
$path='download';
// Alle filer i mappen hentes til et array
chdir($path);
$files=glob('*.*');
// Opretter et array af mime typer for at kunne sende filen til download senere i koden
$mime_types=array();
$mime_types['ai'] ='application/postscript';
$mime_types['asx'] ='video/x-ms-asf';
$mime_types['au'] ='audio/basic';
$mime_types['avi'] ='video/x-msvideo';
$mime_types['bmp'] ='image/bmp';
$mime_types['css'] ='text/css';
$mime_types['doc'] ='application/msword';
$mime_types['eps'] ='application/postscript';
$mime_types['exe'] ='application/octet-stream';
$mime_types['gif'] ='image/gif';
$mime_types['htm'] ='text/html';
$mime_types['html'] ='text/html';
$mime_types['ico'] ='image/x-icon';
$mime_types['jpe'] ='image/jpeg';
$mime_types['jpeg'] ='image/jpeg';
$mime_types['jpg'] ='image/jpeg';
$mime_types['js'] ='application/x-javascript';
$mime_types['mid'] ='audio/mid';
$mime_types['mov'] ='video/quicktime';
$mime_types['mp3'] ='audio/mpeg';
$mime_types['mpeg'] ='video/mpeg';
$mime_types['mpg'] ='video/mpeg';
$mime_types['pdf'] ='application/pdf';
$mime_types['pps'] ='application/vnd.ms-powerpoint';
$mime_types['ppt'] ='application/vnd.ms-powerpoint';
$mime_types['ps'] ='application/postscript';
$mime_types['pub'] ='application/x-mspublisher';
$mime_types['qt'] ='video/quicktime';
$mime_types['rtf'] ='application/rtf';
$mime_types['svg'] ='image/svg+xml';
$mime_types['swf'] ='application/x-shockwave-flash';
$mime_types['tif'] ='image/tiff';
$mime_types['tiff'] ='image/tiff';
$mime_types['txt'] ='text/plain';
$mime_types['wav'] ='audio/x-wav';
$mime_types['wmf'] ='application/x-msmetafile';
$mime_types['xls'] ='application/vnd.ms-excel';
$mime_types['zip'] ='application/zip';
// Findes der et filnavn i GETTER informationen?
if(!$_GET['file']){
// Hvis ikke, smid en besked til brugeren
$error='No file specified to download';
}elseif(!in_array($_GET['file'],$files)){
// hvis filen ikke m? downloades, smid en besked
$error='Requested file is not available';
}else{
// Henter filnavn og filtype
$file=$_GET['file'];
$ext=strtolower(substr(strrchr($file,'.'),1));
}
// Er vores filtype af mime arrayet
if($ext && array_key_exists($ext,$mime_types)){
// Hvis det er s? henter vi mime typen
$mime=$mime_types[$ext];
}else{
// Ellers, smid en besked til brugeren
$error=$error?$error:"Invalid MIME type";
}
// Hvis vi ikke fik nogen fejlmeddelser
if(!$error){
// Eksisterer filen?
if(file_exists("$file")){
// Kan filen l?ses?
if(is_readable("$file")){
// Fil st?rrelse
$size=filesize("$file");
// L?s filen
if($fp=@fopen("$file",'r')){
// send headere
header("Content-type: $mime");
header("Content-Length: $size");
header("Content-Disposition: attachment; filename=\"$file\"");
// send filens indhold
fpassthru($fp);
// Luk filen
fclose($fp);
// og stop
exit;
}
}else{ // Filen kan ikke læses
$error='Cannot read file';
}
}else{ // Filen eksisterer ikke
$error='File not found';
}
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"
http://www.w3.org/TR/html4/strict.dtd"><html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1">
<title>Download</title>
</head>
<body>
<h1>Download Failed</h1>
<?php
if($error) print "<p>The error message is: $error</p>\n";
?>
</body>
</html>
Ovenstående er et script jeg selv har brugt engang. Jeg har dog renset det lidt op fra mine egne ønsker.
Hvad du skal nu er blot at overveje hvordan du vil fortælle scriptet hvilken fil der skal downloades. Her kan du, som jeg ser det, med fordel vælge at gøre brug af GET parametre sådan du opbygger dine links til følgende:
download.php?path=images/thumbs/apple.jpg
min tanke er så at scriptet direkte skal smide apple.jpg til download for din browser.
Du skal lige være opmærksom på at det vil kræve at du bruge din GET parameter i typen af scriptet