]> gitweb.fluxo.info Git - lorea/elgg.git/commitdiff
Merged file mime type detection from 1.7.
authorBrett Profitt <brett.profitt@gmail.com>
Mon, 3 Oct 2011 02:30:37 +0000 (19:30 -0700)
committerBrett Profitt <brett.profitt@gmail.com>
Mon, 3 Oct 2011 02:30:37 +0000 (19:30 -0700)
engine/classes/ElggFile.php
mod/file/actions/file/upload.php

index fe25491a8502a80d70c20db2eb02616156b97d93..f21621ffd6bfc6248208c56cd0c5c564cf069a78 100644 (file)
@@ -120,6 +120,47 @@ class ElggFile extends ElggObject {
                return $this->mimetype = $mimetype;
        }
 
+       /**
+        * Detects mime types based on filename or actual file.
+        *
+        * @param mixed $file    The full path of the file to check. For uploaded files, use tmp_name.
+        * @param mixed $default A default. Useful to pass what the browser thinks it is.
+        * @since 1.7.12
+        *
+        * @return mixed Detected type on success, false on failure.
+        */
+       static function detectMimeType($file = null, $default = null) {
+               if (!$file) {
+                       if (isset($this) && $this->filename) {
+                               $file = $this->filename;
+                       } else {
+                               return false;
+                       }
+               }
+
+               $mime = false;
+
+               // for PHP5 folks.
+               if (function_exists('finfo_file') && defined('FILEINFO_MIME_TYPE')) {
+                       $resource = finfo_open(FILEINFO_MIME_TYPE);
+                       if ($resource) {
+                               $mime = finfo_file($resource, $file);
+                       }
+               }
+
+               // for everyone else.
+               if (!$mime && function_exists('mime_content_type')) {
+                       $mime = mime_content_type($file);
+               }
+
+               // default
+               if (!$mime) {
+                       return $default;
+               }
+
+               return $mime;
+       }
+
        /**
         * Set the optional file description.
         *
index 88a01745d69b34b8048b92b2c209b8b71e04140e..ee2889b4c212a07265b5a092dca402aebb1057f3 100644 (file)
@@ -90,10 +90,11 @@ if (isset($_FILES['upload']['name']) && !empty($_FILES['upload']['name'])) {
                $filestorename = elgg_strtolower(time().$_FILES['upload']['name']);
        }
 
-       $file->setFilename($prefix.$filestorename);
-       $file->setMimeType($_FILES['upload']['type']);
+       $mime_type = $file->detectMimeType($_FILES['upload']['tmp_name'], $_FILES['upload']['type']);
+       $file->setFilename($prefix . $filestorename);
+       $file->setMimeType($mime_type);
        $file->originalfilename = $_FILES['upload']['name'];
-       $file->simpletype = file_get_simple_type($_FILES['upload']['type']);
+       $file->simpletype = file_get_simple_type($mime_type);
 
        // Open the file to guarantee the directory exists
        $file->open("write");