root/releases/elgg0.8rc2/lib/filelib.php

Revision 806, 30.8 kB (checked in by sven, 2 years ago)

filelib: add ogg mimetype. shame there's no flash player for ogg vorbis.

  • 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         'svg'  => array ('type'=>'image/svg+xml', 'icon'=>'image.gif'),
100         'svgz' => array ('type'=>'image/svg+xml', 'icon'=>'image.gif'),
101         'swa'  => array ('type'=>'application/x-director', 'icon'=>'flash.gif'),
102         'swf'  => array ('type'=>'application/x-shockwave-flash', 'icon'=>'flash.gif'),
103         'swfl' => array ('type'=>'application/x-shockwave-flash', 'icon'=>'flash.gif'),
104
105         'sxw'  => array ('type'=>'application/vnd.sun.xml.writer', 'icon'=>'odt.gif'),
106         'stw'  => array ('type'=>'application/vnd.sun.xml.writer.template', 'icon'=>'odt.gif'),
107         'sxc'  => array ('type'=>'application/vnd.sun.xml.calc', 'icon'=>'odt.gif'),
108         'stc'  => array ('type'=>'application/vnd.sun.xml.calc.template', 'icon'=>'odt.gif'),
109         'sxd'  => array ('type'=>'application/vnd.sun.xml.draw', 'icon'=>'odt.gif'),
110         'std'  => array ('type'=>'application/vnd.sun.xml.draw.template', 'icon'=>'odt.gif'),
111         'sxi'  => array ('type'=>'application/vnd.sun.xml.impress', 'icon'=>'odt.gif'),
112         'sti'  => array ('type'=>'application/vnd.sun.xml.impress.template', 'icon'=>'odt.gif'),
113         'sxg'  => array ('type'=>'application/vnd.sun.xml.writer.global', 'icon'=>'odt.gif'),
114         'sxm'  => array ('type'=>'application/vnd.sun.xml.math', 'icon'=>'odt.gif'),
115
116         'tar'  => array ('type'=>'application/x-tar', 'icon'=>'zip.gif'),
117         'tif'  => array ('type'=>'image/tiff', 'icon'=>'image.gif'),
118         'tiff' => array ('type'=>'image/tiff', 'icon'=>'image.gif'),
119         'tex'  => array ('type'=>'application/x-tex', 'icon'=>'text.gif'),
120         'texi' => array ('type'=>'application/x-texinfo', 'icon'=>'text.gif'),
121         'texinfo' => array ('type'=>'application/x-texinfo', 'icon'=>'text.gif'),
122         'tsv'  => array ('type'=>'text/tab-separated-values', 'icon'=>'text.gif'),
123         'txt'  => array ('type'=>'text/plain', 'icon'=>'text.gif'),
124         'wav'  => array ('type'=>'audio/wav', 'icon'=>'audio.gif'),
125         'wmv'  => array ('type'=>'video/x-ms-wmv', 'icon'=>'avi.gif'),
126         'asf'  => array ('type'=>'video/x-ms-asf', 'icon'=>'avi.gif'),
127         'xls'  => array ('type'=>'application/vnd.ms-excel', 'icon'=>'excel.gif'),
128         'xml'  => array ('type'=>'application/xml', 'icon'=>'xml.gif'),
129         'xsl'  => array ('type'=>'text/xml', 'icon'=>'xml.gif'),
130         'zip'  => array ('type'=>'application/zip', 'icon'=>'zip.gif'),
131
132         'asx'  => array ('type'=>'video/x-ms-asf', 'icon'=>'unknown.gif'),
133         'bcpio' => array ('type'=>'application/x-bcpio', 'icon'=>'unknown.gif'),
134         'cdf'  => array ('type'=>'application/x-netcdf', 'icon'=>'unknown.gif'),
135         'cpio' => array ('type'=>'application/x-cpio', 'icon'=>'unknown.gif'),
136         'cpt'  => array ('type'=>'application/mac-compactpro', 'icon'=>'unknown.gif'),
137         'csh'  => array ('type'=>'application/x-csh', 'icon'=>'unknown.gif'),
138         'dtd'  => array ('type'=>'text/xml', 'icon'=>'unknown.gif'),
139         'dvi'  => array ('type'=>'application/x-dvi', 'icon'=>'unknown.gif'),
140         'etx'  => array ('type'=>'text/x-setext', 'icon'=>'unknown.gif'),
141         'evy'  => array ('type'=>'application/x-envoy', 'icon'=>'unknown.gif'),
142         'fif'  => array ('type'=>'application/fractals', 'icon'=>'unknown.gif'),
143         'hdf'  => array ('type'=>'application/x-hdf', 'icon'=>'unknown.gif'),
144         'hpx'  => array ('type'=>'application/mac-binhex40', 'icon'=>'unknown.gif'),
145         'ice'  => array ('type'=>'x-conference/x-cooltalk', 'icon'=>'unknown.gif'),
146         'ief'  => array ('type'=>'image/ief', 'icon'=>'unknown.gif'),
147         'iges' => array ('type'=>'model/iges', 'icon'=>'unknown.gif'),
148         'igs'  => array ('type'=>'model/iges', 'icon'=>'unknown.gif'),
149         'isv'  => array ('type'=>'bws-internal/intrasrv-urlencoded', 'icon'=>'unknown.gif'),
150         'jfm'  => array ('type'=>'bws-internal/intrasrv-form', 'icon'=>'unknown.gif'),
151         'jrp'  => array ('type'=>'bws-internal/intrasrv-report', 'icon'=>'unknown.gif'),
152         'kar'  => array ('type'=>'audio/midi', 'icon'=>'unknown.gif'),
153         'ls'   => array ('type'=>'application/x-javascript', 'icon'=>'unknown.gif'),
154         'man'  => array ('type'=>'application/x-troff-man', 'icon'=>'unknown.gif'),
155         'me'   => array ('type'=>'application/x-troff-me', 'icon'=>'unknown.gif'),
156         'mesh' => array ('type'=>'model/mesh', 'icon'=>'unknown.gif'),
157         'mid'  => array ('type'=>'audio/midi', 'icon'=>'unknown.gif'),
158         'midi' => array ('type'=>'audio/midi', 'icon'=>'unknown.gif'),
159         'mif'  => array ('type'=>'application/x-mif', 'icon'=>'unknown.gif'),
160         'mocha' => array ('type'=>'application/x-javascript', 'icon'=>'unknown.gif'),
161         'mp2'  => array ('type'=>'audio/mpeg', 'icon'=>'unknown.gif'),
162         'mpga' => array ('type'=>'audio/mpeg', 'icon'=>'unknown.gif'),
163         'ms'   => array ('type'=>'application/x-troff-ms', 'icon'=>'unknown.gif'),
164         'msh'  => array ('type'=>'model/mesh', 'icon'=>'unknown.gif'),
165         'nc'   => array ('type'=>'application/x-netcdf', 'icon'=>'unknown.gif'),
166         'oda'  => array ('type'=>'application/oda', 'icon'=>'unknown.gif'),
167         'ogg'  => array ('type'=>'application/ogg', 'icon'=>'unknown.gif'),
168         'pac'  => array ('type'=>'application/x-ns-proxy-autoconfig', 'icon'=>'unknown.gif'),
169         'pbm'  => array ('type'=>'image/x-portable-bitmap', 'icon'=>'unknown.gif'),
170         'pdb'  => array ('type'=>'chemical/x-pdb', 'icon'=>'unknown.gif'),
171         'pgm'  => array ('type'=>'image/x-portable-graymap', 'icon'=>'unknown.gif'),
172         'php3' => array ('type'=>'application/x-httpd-php3', 'icon'=>'unknown.gif'),
173         'msql2' => array ('type'=>'application/x-httpd-php-msql2', 'icon'=>'unknown.gif'),
174         'phtml' => array ('type'=>'application/x-httpd-php', 'icon'=>'unknown.gif'),
175         'pnm'  => array ('type'=>'image/x-portable-anymap', 'icon'=>'unknown.gif'),
176         'ppm'  => array ('type'=>'image/x-portable-pixmap', 'icon'=>'unknown.gif'),
177         'ras'  => array ('type'=>'image/x-cmu-raster', 'icon'=>'unknown.gif'),
178         'rgb'  => array ('type'=>'image/x-rgb', 'icon'=>'unknown.gif'),
179         'roff' => array ('type'=>'application/x-troff', 'icon'=>'unknown.gif'),
180         'rpm'  => array ('type'=>'audio/x-pn-realaudio-plugin', 'icon'=>'unknown.gif'),
181         'sgm'  => array ('type'=>'text/x-sgml', 'icon'=>'unknown.gif'),
182         'sgml' => array ('type'=>'text/x-sgml', 'icon'=>'unknown.gif'),
183         'shar' => array ('type'=>'application/x-shar', 'icon'=>'unknown.gif'),
184         'silo' => array ('type'=>'model/mesh', 'icon'=>'unknown.gif'),
185         'skd'  => array ('type'=>'application/x-koan', 'icon'=>'unknown.gif'),
186         'skm'  => array ('type'=>'application/x-koan', 'icon'=>'unknown.gif'),
187         'skp'  => array ('type'=>'application/x-koan', 'icon'=>'unknown.gif'),
188         'skt'  => array ('type'=>'application/x-koan', 'icon'=>'unknown.gif'),
189         'snd'  => array ('type'=>'audio/basic', 'icon'=>'unknown.gif'),
190         'src'  => array ('type'=>'application/x-wais-source', 'icon'=>'unknown.gif'),
191         'sv4cpio' => array ('type'=>'application/x-sv4cpio', 'icon'=>'unknown.gif'),
192         'sv4crc'=> array ('type'=>'application/x-sv4crc', 'icon'=>'unknown.gif'),
193         't'    => array ('type'=>'application/x-troff', 'icon'=>'unknown.gif'),
194         'tcl'  => array ('type'=>'application/x-tcl', 'icon'=>'unknown.gif'),
195         'text' => array ('type'=>'text/plain', 'icon'=>'unknown.gif'),
196         'tr'   => array ('type'=>'application/x-troff', 'icon'=>'unknown.gif'),
197         'tsp'  => array ('type'=>'application/dsptype', 'icon'=>'unknown.gif'),
198         'ustar' => array ('type'=>'application/x-ustar', 'icon'=>'unknown.gif'),
199         'vcd'  => array ('type'=>'application/x-cdlink', 'icon'=>'unknown.gif'),
200         'vox'  => array ('type'=>'audio/voxware', 'icon'=>'unknown.gif'),
201         'vrml' => array ('type'=>'model/vrml', 'icon'=>'unknown.gif'),
202         'wax'  => array ('type'=>'audio/x-ms-wax', 'icon'=>'unknown.gif'),
203         'wm'   => array ('type'=>'video/x-ms-wm', 'icon'=>'unknown.gif'),
204         'wma'  => array ('type'=>'audio/x-ms-wma', 'icon'=>'unknown.gif'),
205         'wmd'  => array ('type'=>'application/x-ms-wmd', 'icon'=>'unknown.gif'),
206         'wmx'  => array ('type'=>'video/x-ms-wmx', 'icon'=>'unknown.gif'),
207         'wmz'  => array ('type'=>'application/x-ms-wmz', 'icon'=>'unknown.gif'),
208         'wrl'  => array ('type'=>'model/vrml', 'icon'=>'unknown.gif'),
209         'wvx'  => array ('type'=>'video/x-ms-wvx', 'icon'=>'unknown.gif'),
210         'xbm'  => array ('type'=>'image/x-xbitmap', 'icon'=>'unknown.gif'),
211         'xpm'  => array ('type'=>'image/x-xpixmap', 'icon'=>'unknown.gif'),
212         'xwd'  => array ('type'=>'image/x-xwindowdump', 'icon'=>'unknown.gif'),
213         'xyz'  => array ('type'=>'chemical/x-pdb', 'icon'=>'unknown.gif'),
214         'z'    => array ('type'=>'application/x-compress', 'icon'=>'unknown.gif'),
215     );
216     
217     return $mimeinfo;
218 }
219
220 function mimeinfo($element, $filename) {
221     
222     $mimeinfo = get_mimetype_array();
223     if (eregi('\.([a-z0-9]+)$', $filename, $match)) {
224         if (isset($mimeinfo[strtolower($match[1])][$element])) {
225             return $mimeinfo[strtolower($match[1])][$element];
226         } else {
227             return $mimeinfo['xxx'][$element];   // By default
228         }
229     } else {
230         return $mimeinfo['xxx'][$element];   // By default
231     }
232 }
233
234 function mimetype_to_extension($mimetype) {
235     
236     static $mimetypes = 0;
237     if (!is_array($mimetypes)) {
238         $mimeinfo = get_mimetype_array();
239         $mimetypes = array();
240         foreach ($mimeinfo as $key => $val) {
241             $val2 = $val['type'];
242             $mimetypes[$val2] = $key;
243         }
244     }
245     if (isset($mimetypes[$mimetype])) {
246         return $mimetypes[$mimetype];
247     } else {
248         return "xxx";
249     }
250 }
251
252 function send_file($path, $filename, $lifetime=86400 , $filter=false, $pathisstring=false,$forcedownload=false) {
253     global $CFG;
254
255     $mimetype     = $forcedownload ? 'application/x-forcedownload' : mimeinfo('type', $filename);
256     $lastmodified = $pathisstring ? time() : filemtime($path);
257     $filesize     = $pathisstring ? strlen($path) : filesize($path);
258
259     //IE compatibiltiy HACK!
260     if(ini_get('zlib.output_compression')) {
261         ini_set('zlib.output_compression', 'Off');
262     }
263
264     @header('Last-Modified: '. gmdate('D, d M Y H:i:s', $lastmodified) .' GMT');
265     if ($lifetime > 0) {
266         @header('Cache-control: max-age='.$lifetime