Subversion Repositories fileformats

Rev

Rev 4 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

  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. }
  90.