6

I'm looking for the best (possible on most PHP 5.2 installs and still actively developed) way to detect a files MIME type in PHP.

I'm aware of the mime_content_type() method and the Fileinfo extension, however mime_content_type() is unreliable and deprecated, and Fileinfo doesn't come in a "standard" PHP (5.2) install.

Do I have any other options?

4 Answers 4

11

(lol sorry I realized this was asked months ago as I was finishing up. oh well. might as well add this...)

If it's a *nix server you could use file command.

file -bi <filepath>

You'd have to use "exec" in PHP to do that I guess? I'm new to PHP so don't quote me on this but...

$content_type = exec("file -bi " . escapeshellarg($filepath));

I didn't test it so you might need to escape the path string and format the output.

Dunno if this will be more reliable than the other methods.

Sign up to request clarification or add additional context in comments.

Comments

5

Have you looked into this PEAR package?

http://pear.php.net/package/MIME_Type

1 Comment

Thanks. It's not ideal, as all it really does is try to use the two methods I already mentioned, another that wont work on on all systems (ie. Windows), and then falls back to detection by extension, but it looks like my best option for the time being.
0

You could do a subrequest to the webserver you are running on, then parse the header to get the mime type that way. Since this is slow, use curl to only get the headers not the full request. This is important if you are looking at large files.

If you are running Apache and using php as a module, take a look at the VIRTUAL function. it is a faster way to do a subrequest than using curl.

Otherwise, you can lookup the mime type by extension. This will make all well named files work.

Comments

0

Easy: http://www.php.net/manual/en/function.mime-content-type.php#107798

1 Comment

It is not deprecated, though it was apparently incorrectly marked as deprecated previously. Still there in PHP 7, and not marked as deprecated.

Your Answer

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

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.