Login | ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/fileformats/trunk/VtsFileTypeDetect.class.php
Revision: 5
Committed: Sun Nov 15 13:47:58 2020 UTC (12 months, 2 weeks ago) by daniel-marschall
File size: 2664 byte(s)
Log Message:
New file types

File Contents

# Content
1 <?php
2
3 /*
4 * File Type Detection for PHP
5 * Copyright 2020 Daniel Marschall, ViaThinkSoft
6 *
7 * Revision 2020-05-17
8 *
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
12 *
13 * http://www.apache.org/licenses/LICENSE-2.0
14 *
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 */
21
22 class VtsFileTypeDetect {
23
24 public static function getMimeType($filename) {
25 $mime_types = array();
26
27 include __DIR__ . '/mimetype_lookup.inc.php';
28
29 foreach ($mime_types as $ext => $mime) {
30 if (strtoupper(substr($filename, -strlen($ext)-1)) == strtoupper('.'.$ext)) {
31 return $mime;
32 }
33 }
34
35 return false;
36 }
37
38 public static function getDescription($file, $filenames=array(__DIR__.'/filetypes.local', __DIR__.'/filetypes.conf')) {
39 // TODO: Make it multi-lang
40
41 $inis = array();
42 foreach ($filenames as $num => $filename) {
43 $inis[$num] = !file_exists($filename) ? array() : parse_ini_file($filename, true, INI_SCANNER_RAW);
44 if (!isset($inis[$num]['OidHeader'])) $inis[$num]['OidHeader'] = array();
45 if (!isset($inis[$num]['GuidHeader'])) $inis[$num]['GuidHeader'] = array();
46 if (!isset($inis[$num]['FileExtension'])) $inis[$num]['FileExtension'] = array();
47 if (!isset($inis[$num]['MimeType'])) $inis[$num]['MimeType'] = array();
48 }
49
50 if (is_readable($file)) {
51 $h = fopen($file, 'r');
52 $line = trim(fgets($h, 128));
53 if ((substr($line,0,1) == '[') && ($line[strlen($line)-1] == ']')) {
54 $line = substr($line, 1, strlen($line)-2);
55 foreach ($inis as $ini) {
56 if (isset($ini['OidHeader'][$line])) return $ini['OidHeader'][$line];
57 }
58 foreach ($inis as $ini) {
59 if (isset($ini['GuidHeader'][$line])) return $ini['GuidHeader'][$line];
60 }
61 }
62 fclose($h);
63 }
64
65 foreach ($inis as $ini) {
66 foreach ($ini['FileExtension'] as $ext => $name) {
67 if (strtoupper(substr($file, -strlen($ext)-1)) == strtoupper('.'.$ext)) {
68 return $name;
69 }
70 }
71 }
72
73 $mime = false;
74 if (function_exists('mime_content_type')) {
75 $mime = @mime_content_type($file);
76 }
77 if (!$mime) {
78 $mime = self::getMimeType($file);
79 }
80 if ($mime) {
81 foreach ($inis as $ini) {
82 if (isset($ini['MimeType'][$mime])) return $ini['MimeType'][$mime];
83 }
84 }
85
86 return $ini['Static']['LngUnknown'];
87 }
88
89 }