From ecebf3a8627f527cbd184b7907dd91f65764617b Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Tue, 2 Dec 2008 22:03:22 +0100 Subject: Make content-disposition configurable in mime.conf FS#1541 With this patch it is possible to define if a file should be served as download or be displayed inside the browser (if supported) by configuring it in conf/mime.conf Mimetypes that should be served with a "Content-Disposition: attachment" header need to be prefixed with a exclamation mark. All others will be served inline. This will also fix a Problem with Flash 10. darcs-hash:20081202210322-7ad00-6e7ef30aff9322cd135311be77809187da121f3b.gz --- lib/exe/fetch.php | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) (limited to 'lib/exe/fetch.php') diff --git a/lib/exe/fetch.php b/lib/exe/fetch.php index becb60b64..dd4da459c 100644 --- a/lib/exe/fetch.php +++ b/lib/exe/fetch.php @@ -25,10 +25,11 @@ $CACHE = calc_cache($_REQUEST['cache']); $WIDTH = (int) $_REQUEST['w']; $HEIGHT = (int) $_REQUEST['h']; - list($EXT,$MIME) = mimetype($MEDIA); + list($EXT,$MIME,$DL) = mimetype($MEDIA); if($EXT === false){ $EXT = 'unknown'; $MIME = 'application/octet-stream'; + $DL = true; } //media to local file @@ -78,17 +79,18 @@ } // finally send the file to the client - $data = array('file' => $FILE, - 'mime' => $MIME, - 'cache' => $CACHE, - 'orig' => $ORIG, - 'ext' => $EXT, - 'width' => $WIDTH, - 'height' => $HEIGHT); + $data = array('file' => $FILE, + 'mime' => $MIME, + 'download' => $DL, + 'cache' => $CACHE, + 'orig' => $ORIG, + 'ext' => $EXT, + 'width' => $WIDTH, + 'height' => $HEIGHT); $evt = new Doku_Event('MEDIA_SENDFILE', $data); if ($evt->advise_before()) { - sendFile($data['file'],$data['mime'],$data['cache']); + sendFile($data['file'],$data['mime'],$data['download'],$data['cache']); } /* ------------------------------------------------------------------------ */ @@ -99,7 +101,7 @@ * @author Andreas Gohr * @author Ben Coburn */ -function sendFile($file,$mime,$cache){ +function sendFile($file,$mime,$dl,$cache){ global $conf; $fmtime = @filemtime($file); // send headers @@ -126,9 +128,11 @@ function sendFile($file,$mime,$cache){ http_conditionalRequest($fmtime); - //application mime type is downloadable - if(substr($mime,0,11) == 'application'){ + //download or display? + if($dl){ header('Content-Disposition: attachment; filename="'.basename($file).'";'); + }else{ + header('Content-Disposition: inline; filename="'.basename($file).'";'); } //use x-sendfile header to pass the delivery to compatible webservers -- cgit v1.2.3