root/releases/0.6rc2/lib/filelib.php

Revision 269, 22.9 kB (checked in by ben, 3 years ago)

--

  • Property svn:eol-style set to native
Line 
1 <?php //$Id: filelib.php,v 1.15 2005/09/19 17:13:06 skodak Exp $
2
3 function mimeinfo($element, $filename) {
4     $mimeinfo = array (
5         'xxx'  => array ('type'=>'document/unknown', 'icon'=>'unknown.gif'),
6         '3gp'  => array ('type'=>'video/quicktime', 'icon'=>'video.gif'),
7         'ai'   => array ('type'=>'application/postscript', 'icon'=>'image.gif'),
8         'aif'  => array ('type'=>'audio/x-aiff', 'icon'=>'audio.gif'),
9         'aiff' => array ('type'=>'audio/x-aiff', 'icon'=>'audio.gif'),
10         'aifc' => array ('type'=>'audio/x-aiff', 'icon'=>'audio.gif'),
11         'applescript'  => array ('type'=>'text/plain', 'icon'=>'text.gif'),
12         'asc'  => array ('type'=>'text/plain', 'icon'=>'text.gif'),
13         'asm'  => array ('type'=>'text/plain', 'icon'=>'text.gif'),
14         'au'   => array ('type'=>'audio/au', 'icon'=>'audio.gif'),
15         'avi'  => array ('type'=>'video/x-ms-wm', 'icon'=>'avi.gif'),
16         'bmp'  => array ('type'=>'image/bmp', 'icon'=>'image.gif'),
17         'c'    => array ('type'=>'text/plain', 'icon'=>'text.gif'),
18         'cct'  => array ('type'=>'shockwave/director', 'icon'=>'flash.gif'),
19         'cpp'  => array ('type'=>'text/plain', 'icon'=>'text.gif'),
20         'cs'   => array ('type'=>'application/x-csh', 'icon'=>'text.gif'),
21         'css'  => array ('type'=>'text/css', 'icon'=>'text.gif'),
22         'dv'   => array ('type'=>'video/x-dv', 'icon'=>'video.gif'),
23         'dmg'  => array ('type'=>'application/octet-stream', 'icon'=>'dmg.gif'),
24         'doc'  => array ('type'=>'application/msword', 'icon'=>'word.gif'),
25         'dcr'  => array ('type'=>'application/x-director', 'icon'=>'flash.gif'),
26         'dif'  => array ('type'=>'video/x-dv', 'icon'=>'video.gif'),
27         'dir'  => array ('type'=>'application/x-director', 'icon'=>'flash.gif'),
28         'dxr'  => array ('type'=>'application/x-director', 'icon'=>'flash.gif'),
29         'eps'  => array ('type'=>'application/postscript', 'icon'=>'pdf.gif'),
30         'gif'  => array ('type'=>'image/gif', 'icon'=>'image.gif'),
31         'gtar' => array ('type'=>'application/x-gtar', 'icon'=>'zip.gif'),
32         'tgz'   => array ('type'=>'application/g-zip', 'icon'=>'zip.gif'),
33         'gz'   => array ('type'=>'application/g-zip', 'icon'=>'zip.gif'),
34         'gzip' => array ('type'=>'application/g-zip', 'icon'=>'zip.gif'),
35         'h'    => array ('type'=>'text/plain', 'icon'=>'text.gif'),
36         'hpp'  => array ('type'=>'text/plain', 'icon'=>'text.gif'),
37         'hqx'  => array ('type'=>'application/mac-binhex40', 'icon'=>'zip.gif'),
38         'html' => array ('type'=>'text/html', 'icon'=>'html.gif'),
39         'htm'  => array ('type'=>'text/html', 'icon'=>'html.gif'),
40         'java' => array ('type'=>'text/plain', 'icon'=>'text.gif'),
41         'jcb'  => array ('type'=>'text/xml', 'icon'=>'jcb.gif'),
42         'jcl'  => array ('type'=>'text/xml', 'icon'=>'jcl.gif'),
43         'jcw'  => array ('type'=>'text/xml', 'icon'=>'jcw.gif'),
44         'jmt'  => array ('type'=>'text/xml', 'icon'=>'jmt.gif'),
45         'jmx'  => array ('type'=>'text/xml', 'icon'=>'jmx.gif'),
46         'jpe'  => array ('type'=>'image/jpeg', 'icon'=>'image.gif'),
47         'jpeg' => array ('type'=>'image/jpeg', 'icon'=>'image.gif'),
48         'jpg'  => array ('type'=>'image/jpeg', 'icon'=>'image.gif'),
49         'jqz'  => array ('type'=>'text/xml', 'icon'=>'jqz.gif'),
50         'js'   => array ('type'=>'application/x-javascript', 'icon'=>'text.gif'),
51         'latex'=> array ('type'=>'application/x-latex', 'icon'=>'text.gif'),
52         'm'    => array ('type'=>'text/plain', 'icon'=>'text.gif'),
53         'mov'  => array ('type'=>'video/quicktime', 'icon'=>'video.gif'),
54         'movie'=> array ('type'=>'video/x-sgi-movie', 'icon'=>'video.gif'),
55         'm3u'  => array ('type'=>'audio/x-mpegurl', 'icon'=>'audio.gif'),
56         'mp3'  => array ('type'=>'audio/mp3', 'icon'=>'audio.gif'),
57         'mp4'  => array ('type'=>'video/mp4', 'icon'=>'video.gif'),
58         'mpeg' => array ('type'=>'video/mpeg', 'icon'=>'video.gif'),
59         'mpe'  => array ('type'=>'video/mpeg', 'icon'=>'video.gif'),
60         'mpg'  => array ('type'=>'video/mpeg', 'icon'=>'video.gif'),
61
62         'odt'  => array ('type'=>'application/vnd.oasis.opendocument.text', 'icon'=>'odt.gif'),
63         'ott'  => array ('type'=>'application/vnd.oasis.opendocument.text-template', 'icon'=>'odt.gif'),
64         'oth'  => array ('type'=>'application/vnd.oasis.opendocument.text-web', 'icon'=>'odt.gif'),
65         'odm'  => array ('type'=>'application/vnd.oasis.opendocument.text-master', 'icon'=>'odt.gif'),
66         'odg'  => array ('type'=>'application/vnd.oasis.opendocument.graphics', 'icon'=>'odt.gif'),
67         'otg'  => array ('type'=>'application/vnd.oasis.opendocument.graphics-template', 'icon'=>'odt.gif'),
68         'odp'  => array ('type'=>'application/vnd.oasis.opendocument.presentation', 'icon'=>'odt.gif'),
69         'otp'  => array ('type'=>'application/vnd.oasis.opendocument.presentation-template', 'icon'=>'odt.gif'),
70         'ods'  => array ('type'=>'application/vnd.oasis.opendocument.spreadsheet', 'icon'=>'odt.gif'),
71         'ots'  => array ('type'=>'application/vnd.oasis.opendocument.spreadsheet-template', 'icon'=>'odt.gif'),
72         'odc'  => array ('type'=>'application/vnd.oasis.opendocument.chart', 'icon'=>'odt.gif'),
73         'odf'  => array ('type'=>'application/vnd.oasis.opendocument.formula', 'icon'=>'odt.gif'),
74         'odb'  => array ('type'=>'application/vnd.oasis.opendocument.database', 'icon'=>'odt.gif'),
75         'odi'  => array ('type'=>'application/vnd.oasis.opendocument.image', 'icon'=>'odt.gif'),
76
77         'pct'  => array ('type'=>'image/pict', 'icon'=>'image.gif'),
78         'pdf'  => array ('type'=>'application/pdf', 'icon'=>'pdf.gif'),
79         'php'  => array ('type'=>'text/plain', 'icon'=>'text.gif'),
80         'pic'  => array ('type'=>'image/pict', 'icon'=>'image.gif'),
81         'pict' => array ('type'=>'image/pict', 'icon'=>'image.gif'),
82         'png'  => array ('type'=>'image/png', 'icon'=>'image.gif'),
83         'pps'  => array ('type'=>'application/vnd.ms-powerpoint', 'icon'=>'powerpoint.gif'),
84         'ppt'  => array ('type'=>'application/vnd.ms-powerpoint', 'icon'=>'powerpoint.gif'),
85         'ps'   => array ('type'=>'application/postscript', 'icon'=>'pdf.gif'),
86         'qt'   => array ('type'=>'video/quicktime', 'icon'=>'video.gif'),
87         'ra'   => array ('type'=>'audio/x-realaudio', 'icon'=>'audio.gif'),
88         'ram'  => array ('type'=>'audio/x-pn-realaudio', 'icon'=>'audio.gif'),
89         'rhb'  => array ('type'=>'text/xml', 'icon'=>'xml.gif'),
90         'rm'   => array ('type'=>'audio/x-pn-realaudio', 'icon'=>'audio.gif'),
91         'rtf'  => array ('type'=>'text/rtf', 'icon'=>'text.gif'),
92         'rtx'  => array ('type'=>'text/richtext', 'icon'=>'text.gif'),
93         'sh'   => array ('type'=>'application/x-sh', 'icon'=>'text.gif'),
94         'sit'  => array ('type'=>'application/x-stuffit', 'icon'=>'zip.gif'),
95         'smi'  => array ('type'=>'application/smil', 'icon'=>'text.gif'),
96         'smil' => array ('type'=>'application/smil', 'icon'=>'text.gif'),
97         'sqt'  => array ('type'=>'text/xml', 'icon'=>'xml.gif'),
98         'swa'  => array ('type'=>'application/x-director', 'icon'=>'flash.gif'),
99         'swf'  => array ('type'=>'application/x-shockwave-flash', 'icon'=>'flash.gif'),
100         'swfl' => array ('type'=>'application/x-shockwave-flash', 'icon'=>'flash.gif'),
101
102         'sxw'  => array ('type'=>'application/vnd.sun.xml.writer', 'icon'=>'odt.gif'),
103         'stw'  => array ('type'=>'application/vnd.sun.xml.writer.template', 'icon'=>'odt.gif'),
104         'sxc'  => array ('type'=>'application/vnd.sun.xml.calc', 'icon'=>'odt.gif'),
105         'stc'  => array ('type'=>'application/vnd.sun.xml.calc.template', 'icon'=>'odt.gif'),
106         'sxd'  => array ('type'=>'application/vnd.sun.xml.draw', 'icon'=>'odt.gif'),
107         'std'  => array ('type'=>'application/vnd.sun.xml.draw.template', 'icon'=>'odt.gif'),
108         'sxi'  => array ('type'=>'application/vnd.sun.xml.impress', 'icon'=>'odt.gif'),
109         'sti'  => array ('type'=>'application/vnd.sun.xml.impress.template', 'icon'=>'odt.gif'),
110         'sxg'  => array ('type'=>'application/vnd.sun.xml.writer.global', 'icon'=>'odt.gif'),
111         'sxm'  => array ('type'=>'application/vnd.sun.xml.math', 'icon'=>'odt.gif'),
112
113         'tar'  => array ('type'=>'application/x-tar', 'icon'=>'zip.gif'),
114         'tif'  => array ('type'=>'image/tiff', 'icon'=>'image.gif'),
115         'tiff' => array ('type'=>'image/tiff', 'icon'=>'image.gif'),
116         'tex'  => array ('type'=>'application/x-tex', 'icon'=>'text.gif'),
117         'texi' => array ('type'=>'application/x-texinfo', 'icon'=>'text.gif'),
118         'texinfo'  => array ('type'=>'application/x-texinfo', 'icon'=>'text.gif'),
119         'tsv'  => array ('type'=>'text/tab-separated-values', 'icon'=>'text.gif'),
120         'txt'  => array ('type'=>'text/plain', 'icon'=>'text.gif'),
121         'wav'  => array ('type'=>'audio/wav', 'icon'=>'audio.gif'),
122         'wmv'  => array ('type'=>'video/x-ms-wmv', 'icon'=>'avi.gif'),
123         'asf'  => array ('type'=>'video/x-ms-asf', 'icon'=>'avi.gif'),
124         'xls'  => array ('type'=>'application/vnd.ms-excel', 'icon'=>'excel.gif'),
125         'xml'  => array ('type'=>'application/xml', 'icon'=>'xml.gif'),
126         'xsl'  => array ('type'=>'text/xml', 'icon'=>'xml.gif'),
127         'zip'  => array ('type'=>'application/zip', 'icon'=>'zip.gif'),
128
129         'asx'  => array ('type'=>'video/x-ms-asf', 'icon'=>'unknown.gif'),
130         'bcpio' => array ('type'=>'application/x-bcpio', 'icon'=>'unknown.gif'),
131         'cdf'  => array ('type'=>'application/x-netcdf', 'icon'=>'unknown.gif'),
132         'cpio' => array ('type'=>'application/x-cpio', 'icon'=>'unknown.gif'),
133         'cpt'  => array ('type'=>'application/mac-compactpro', 'icon'=>'unknown.gif'),
134         'csh'  => array ('type'=>'application/x-csh', 'icon'=>'unknown.gif'),
135         'dtd'  => array ('type'=>'text/xml', 'icon'=>'unknown.gif'),
136         'dvi'  => array ('type'=>'application/x-dvi', 'icon'=>'unknown.gif'),
137         'etx'  => array ('type'=>'text/x-setext', 'icon'=>'unknown.gif'),
138         'evy'  => array ('type'=>'application/x-envoy', 'icon'=>'unknown.gif'),
139         'fif'  => array ('type'=>'application/fractals', 'icon'=>'unknown.gif'),
140         'hdf'  => array ('type'=>'application/x-hdf', 'icon'=>'unknown.gif'),
141         'hpx'  => array ('type'=>'application/mac-binhex40', 'icon'=>'unknown.gif'),
142         'ice'  => array ('type'=>'x-conference/x-cooltalk', 'icon'=>'unknown.gif'),
143         'ief'  => array ('type'=>'image/ief', 'icon'=>'unknown.gif'),
144         'iges' => array ('type'=>'model/iges', 'icon'=>'unknown.gif'),
145         'igs'  => array ('type'=>'model/iges', 'icon'=>'unknown.gif'),
146         'isv'  => array ('type'=>'bws-internal/intrasrv-urlencoded', 'icon'=>'unknown.gif'),
147         'jfm'  => array ('type'=>'bws-internal/intrasrv-form', 'icon'=>'unknown.gif'),
148         'jrp'  => array ('type'=>'bws-internal/intrasrv-report', 'icon'=>'unknown.gif'),
149         'kar'  => array ('type'=>'audio/midi', 'icon'=>'unknown.gif'),
150         'ls'   => array ('type'=>'application/x-javascript', 'icon'=>'unknown.gif'),
151         'man'  => array ('type'=>'application/x-troff-man', 'icon'=>'unknown.gif'),
152         'me'   => array ('type'=>'application/x-troff-me', 'icon'=>'unknown.gif'),
153         'mesh' => array ('type'=>'model/mesh', 'icon'=>'unknown.gif'),
154         'mid'  => array ('type'=>'audio/midi', 'icon'=>'unknown.gif'),
155         'midi' => array ('type'=>'audio/midi', 'icon'=>'unknown.gif'),
156         'mif'  => array ('type'=>'application/x-mif', 'icon'=>'unknown.gif'),
157         'mocha' => array ('type'=>'application/x-javascript', 'icon'=>'unknown.gif'),
158         'mp2'  => array ('type'=>'audio/mpeg', 'icon'=>'unknown.gif'),
159         'mpga' => array ('type'=>'audio/mpeg', 'icon'=>'unknown.gif'),
160         'ms'   => array ('type'=>'application/x-troff-ms', 'icon'=>'unknown.gif'),
161         'msh'  => array ('type'=>'model/mesh', 'icon'=>'unknown.gif'),
162         'nc'   => array ('type'=>'application/x-netcdf', 'icon'=>'unknown.gif'),
163         'oda'  => array ('type'=>'application/oda', 'icon'=>'unknown.gif'),
164         'pac'  => array ('type'=>'application/x-ns-proxy-autoconfig', 'icon'=>'unknown.gif'),
165         'pbm'  => array ('type'=>'image/x-portable-bitmap', 'icon'=>'unknown.gif'),
166         'pdb'  => array ('type'=>'chemical/x-pdb', 'icon'=>'unknown.gif'),
167         'pgm'  => array ('type'=>'image/x-portable-graymap', 'icon'=>'unknown.gif'),
168         'php3' => array ('type'=>'application/x-httpd-php3', 'icon'=>'unknown.gif'),
169         'msql2' => array ('type'=>'application/x-httpd-php-msql2', 'icon'=>'unknown.gif'),
170         'phtml' => array ('type'=>'application/x-httpd-php', 'icon'=>'unknown.gif'),
171         'pnm'  => array ('type'=>'image/x-portable-anymap', 'icon'=>'unknown.gif'),
172         'ppm'  => array ('type'=>'image/x-portable-pixmap', 'icon'=>'unknown.gif'),
173         'ras'  => array ('type'=>'image/x-cmu-raster', 'icon'=>'unknown.gif'),
174         'rgb'  => array ('type'=>'image/x-rgb', 'icon'=>'unknown.gif'),
175         'roff' => array ('type'=>'application/x-troff', 'icon'=>'unknown.gif'),
176         'rpm'  => array ('type'=>'audio/x-pn-realaudio-plugin', 'icon'=>'unknown.gif'),
177         'sgm'  => array ('type'=>'text/x-sgml', 'icon'=>'unknown.gif'),
178         'sgml' => array ('type'=>'text/x-sgml', 'icon'=>'unknown.gif'),
179         'shar' => array ('type'=>'application/x-shar', 'icon'=>'unknown.gif'),
180         'silo' => array ('type'=>'model/mesh', 'icon'=>'unknown.gif'),
181         'skd'  => array ('type'=>'application/x-koan', 'icon'=>'unknown.gif'),
182         'skm'  => array ('type'=>'application/x-koan', 'icon'=>'unknown.gif'),
183         'skp'  => array ('type'=>'application/x-koan', 'icon'=>'unknown.gif'),
184         'skt'  => array ('type'=>'application/x-koan', 'icon'=>'unknown.gif'),
185         'snd'  => array ('type'=>'audio/basic', 'icon'=>'unknown.gif'),
186         'src'  => array ('type'=>'application/x-wais-source', 'icon'=>'unknown.gif'),
187         'sv4cpio' => array ('type'=>'application/x-sv4cpio', 'icon'=>'unknown.gif'),
188         'sv4crc'=> array ('type'=>'application/x-sv4crc', 'icon'=>'unknown.gif'),
189         't'    => array ('type'=>'application/x-troff', 'icon'=>'unknown.gif'),
190         'tcl'  => array ('type'=>'application/x-tcl', 'icon'=>'unknown.gif'),
191         'text' => array ('type'=>'text/plain', 'icon'=>'unknown.gif'),
192         'tr'   => array ('type'=>'application/x-troff', 'icon'=>'unknown.gif'),
193         'tsp'  => array ('type'=>'application/dsptype', 'icon'=>'unknown.gif'),
194         'ustar' => array ('type'=>'application/x-ustar', 'icon'=>'unknown.gif'),
195         'vcd'  => array ('type'=>'application/x-cdlink', 'icon'=>'unknown.gif'),
196         'vox'  => array ('type'=>'audio/voxware', 'icon'=>'unknown.gif'),
197         'vrml' => array ('type'=>'model/vrml', 'icon'=>'unknown.gif'),
198         'wax'  => array ('type'=>'audio/x-ms-wax', 'icon'=>'unknown.gif'),
199         'wm'   => array ('type'=>'video/x-ms-wm', 'icon'=>'unknown.gif'),
200         'wma'  => array ('type'=>'audio/x-ms-wma', 'icon'=>'unknown.gif'),
201         'wmd'  => array ('type'=>'application/x-ms-wmd', 'icon'=>'unknown.gif'),
202         'wmx'  => array ('type'=>'video/x-ms-wmx', 'icon'=>'unknown.gif'),
203         'wmz'  => array ('type'=>'application/x-ms-wmz', 'icon'=>'unknown.gif'),
204         'wrl'  => array ('type'=>'model/vrml', 'icon'=>'unknown.gif'),
205         'wvx'  => array ('type'=>'video/x-ms-wvx', 'icon'=>'unknown.gif'),
206         'xbm'  => array ('type'=>'image/x-xbitmap', 'icon'=>'unknown.gif'),
207         'xpm'  => array ('type'=>'image/x-xpixmap', 'icon'=>'unknown.gif'),
208         'xwd'  => array ('type'=>'image/x-xwindowdump', 'icon'=>'unknown.gif'),
209         'xyz'  => array ('type'=>'chemical/x-pdb', 'icon'=>'unknown.gif'),
210         'z'    => array ('type'=>'application/x-compress', 'icon'=>'unknown.gif'),
211     );
212
213     if (eregi('\.([a-z0-9]+)$', $filename, $match)) {
214         if (isset($mimeinfo[strtolower($match[1])][$element])) {
215             return $mimeinfo[strtolower($match[1])][$element];
216         } else {
217             return $mimeinfo['xxx'][$element];   // By default
218         }
219     } else {
220         return $mimeinfo['xxx'][$element];   // By default
221     }
222 }
223
224 function send_file($path, $filename, $lifetime=86400 , $filter=false, $pathisstring=false,$forcedownload=false) {
225     global $CFG;
226
227     $mimetype     = $forcedownload ? 'application/x-forcedownload' : mimeinfo('type', $filename);
228     $lastmodified = $pathisstring ? time() : filemtime($path);
229     $filesize     = $pathisstring ? strlen($path) : filesize($path);
230
231     //IE compatibiltiy HACK!
232     if(ini_get('zlib.output_compression')) {
233         ini_set('zlib.output_compression', 'Off');
234     }
235
236     @header('Last-Modified: '. gmdate('D, d M Y H:i:s', $lastmodified) .' GMT');
237     if ($lifetime > 0) {
238         @header('Cache-control: max-age='.$lifetime);
239         @header('Expires: '. gmdate('D, d M Y H:i:s', time() + $lifetime) .'GMT');
240         @header('Pragma: ');
241     } else {
242         if (strpos($CFG->wwwroot, 'https://') === 0) { //https sites - watch out for IE! KB812935 and KB316431
243             @header('Cache-Control: max-age=10');
244             @header('Expires: '. gmdate('D, d M Y H:i:s', 0) .'GMT');
245             @header('Pragma: ');
246         } else { //normal http - prevent caching at all cost
247             @header('Cache-Control: private, must-revalidate, pre-check=0, post-check=0, max-age=0');
248             @header('Expires: '. gmdate('D, d M Y H:i:s', 0) .'GMT');
249             @header('Pragma: no-cache');
250         }
251     }
252     @header('Accept-Ranges: none'); // Comment out if PDFs do not work...
253
254     if ($forcedownload) {
255         @header('Content-disposition: attachment; filename='.$filename);
256     } else {
257         @header('Content-disposition: inline; filename='.$filename);
258     }
259
260     if (!$filter) {
261         @