Using finfo to get the mime type of uploaded files
authorMarcel Werk <burntime@woltlab.com>
Mon, 13 Feb 2012 11:18:08 +0000 (12:18 +0100)
committerMarcel Werk <burntime@woltlab.com>
Mon, 13 Feb 2012 11:18:08 +0000 (12:18 +0100)
wcfsetup/install/files/lib/system/upload/UploadHandler.class.php
wcfsetup/install/files/lib/util/FileUtil.class.php

index afdf62aa5b2991b051f26bdde5c61dc466e4778c..73911764c57eaeaf9fc6f0875546911ac9be54ea 100644 (file)
@@ -1,5 +1,6 @@
 <?php
 namespace wcf\system\upload;
+use wcf\util\FileUtil;
 
 /**
  * Handles file uploads.
@@ -33,11 +34,11 @@ class UploadHandler {
                if (is_array($rawFileData['name'])) {
                        // multiple uploads
                        for ($i = 0, $l = count($rawFileData['name']); $i < $l; $i++) {
-                               $this->files[] = new UploadFile($rawFileData['name'][$i], $rawFileData['tmp_name'][$i], $rawFileData['size'][$i], $rawFileData['error'][$i], $rawFileData['type'][$i]);
+                               $this->files[] = new UploadFile($rawFileData['name'][$i], $rawFileData['tmp_name'][$i], $rawFileData['size'][$i], $rawFileData['error'][$i], (FileUtil::getMimeType($rawFileData['tmp_name'][$i]) ?: $rawFileData['type'][$i]));
                        }
                }
                else {
-                       $this->files[] = new UploadFile($rawFileData['name'], $rawFileData['tmp_name'], $rawFileData['size'], $rawFileData['error'], $rawFileData['type']);
+                       $this->files[] = new UploadFile($rawFileData['name'], $rawFileData['tmp_name'], $rawFileData['size'], $rawFileData['error'], (FileUtil::getMimeType($rawFileData['tmp_name']) ?: $rawFileData['type']));
                }
        }
        
index 6164f8fee656963f5335cdd68ddd039a63f7e5c9..eb27e610d3cf8e013c941fdb93d9077a85433542 100644 (file)
@@ -17,6 +17,12 @@ use wcf\system\WCF;
  * @category   Community Framework
  */
 class FileUtil {
+       /**
+        * finfo instance
+        * @var \finfo
+        */
+       protected static $finfo = null;
+       
        /**
         * Tries to find the temp folder.
         * 
@@ -600,4 +606,19 @@ class FileUtil {
        public static function isApacheModule() {
                return function_exists('apache_get_version');
        }
+       
+       /**
+        * Returns the mime type of a file.
+        * 
+        * @param       string          $filename
+        * @return      string
+        */
+       public static function getMimeType($filename) {
+               if (self::$finfo === null) {
+                       if (!class_exists('\finfo', false)) return '';
+                       self::$finfo = new \finfo(FILEINFO_MIME_TYPE);
+               }
+               
+               return self::$finfo->file($filename);
+       }
 }