Question

I'm calling this bellow method as GetID3MIMEtype('test.docx') That method change file type to "application/zip" but i'm not upload any zip file this not correct file type.

 function GetID3MIMEtype($filename) {
      $filename = realpath($filename);
      $getID3 = new getID3;
      $ThisFileInfo = $getID3->analyze($filename);
      getid3_lib::CopyTagsToComments($ThisFileInfo);      
      log_error(print_r($ThisFileInfo['mime_type'], true));
      if (empty($ThisFileInfo['error'])) {
         if ($ThisFileInfo['fileformat']) {
            $temp = explode("/", $ThisFileInfo['mime_type']);
            $mime = $temp[0]."/".$ThisFileInfo['fileformat'];
         }
         else
            $mime = $ThisFileInfo['mime_type'];
         return $mime;
      }
      else {
         log_error("ID 3 Error - ".$filename." - ".print_r($ThisFileInfo['error'], true));
         return false;
      }
   } 

Question

  1. What is getID3 class
  2. Why this class change file Mine Type
Was it helpful?

Solution

A .docx file is a zip file - try renaming it to .zip and opening it. You'll see it's a collection of XML and other embedded documents.

That said, getId3 is designed to be used on Multimedia file types - video and audio files - as it says on the project page

It's a Mime Type not a Mine Type. It's similar to a file extension but more powerful. It lets different applications (possibly on different platforms) know how a specific file should be handled. Try reading this page for more information.

OTHER TIPS

There seems to be a bug in this getID3 libary; at least in the current version getid3-1.9.5-20130220.

If you open the file module.archive.zip.php and change the block

if (!empty($ThisFileInfo['zip']['files']['ppt'])) {
  $info['mime_type'] = 'application/vnd.openxmlformats-officedocument.presentationml.presentation';
} elseif (!empty($ThisFileInfo['zip']['files']['xl'])) {
  $info['mime_type'] = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
} elseif (!empty($ThisFileInfo['zip']['files']['word'])) {
  $info['mime_type'] = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';
}

to

if (!empty($info['zip']['files']['ppt'])) {
  $info['mime_type'] = 'application/vnd.openxmlformats-officedocument.presentationml.presentation';
} elseif (!empty($info['zip']['files']['xl'])) {
  $info['mime_type'] = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
} elseif (!empty($info['zip']['files']['word'])) {
  $info['mime_type'] = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';
}

(i.e. change $ThisFileInfo to $info)

the mime type changes from application/zip to application/vnd.openxmlformats-officedocument.wordprocessingml.document for a word .docx

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top