root/releases/0.672/lib/filelib.php

Revision 733, 30.5 kB (checked in by ben, 2 years ago)

Various external file cacheing changes.

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