2

I want to get the exact MIME type basing on the file content, not its extension. I have used PHP methods and the API exposed by a module, but they return the MIME type basing on the file extension.

How do I get the MIME type from the file content?

2 Answers 2

3

Suppose you have the file binary source sent in a post request JSON encoded or any encoding method you could get the MIME type like in the following piece of code

$data = base64_decode(trim($_REQUEST['file']));
$finfo = finfo_open();
$mime_type = finfo_buffer($finfo, $data, FILEINFO_MIME_TYPE);
finfo_close($finfo);
// get file type png. jpg
$ext = $mime_type ? str_replace('image/', '', $mime_type) : 'png';

Hint:Its better to send the file mime type in the request as encoding and decoding may cause not get the MIME type.

Using file_get_contents

$buffer = file_get_contents($url);
$finfo = new finfo(FILEINFO_MIME_TYPE);
$ext = $finfo->buffer($buffer);

More information found here

Save the file using file_save_data to be a managed file and you could then use it as a field in any entity

4
3

You can easily get the MIME type of a file using mime_content_type() function.

$mime_type = mime_content_type($path_to_the_file);

I've just tested it on my local machine; placed a test.pdf file in my home folder and renamed it giving it no and an incorrect extension. In both cases I got the right MIME type:

$ ls
test.pdf

$ drush eval 'var_dump(mime_content_type("/home/elin/test.pdf"))'
string(15) "application/pdf"

$ mv test.pdf test
$ drush eval 'var_dump(mime_content_type("/home/elin/test"))'
string(15) "application/pdf"

$ mv test test.jpg
$ drush eval 'var_dump(mime_content_type("/home/elin/test.jpg"))'
string(15) "application/pdf"

$ mv test.jpg test.png
$ drush eval 'var_dump(mime_content_type("/home/elin/test.png"))'
string(15) "application/pdf"
4
  • Please change your file extention pdf to png then Check what type of mime you get Nov 23, 2015 at 16:58
  • @KamalOberoi The same result. Updated my answer with the output. Nov 24, 2015 at 8:02
  • Thanks for your reply, but i have used it and not able to get correct mime type.. i have always got application/octect-stream. Dec 1, 2015 at 3:52
  • Which version of PHP are you using? I've tested it on PHP 5.5.9 Dec 4, 2015 at 11:32

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.