views:

1553

answers:

3

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  A: 

Have you looked into this PEAR package?

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

Jeremy DeGroot
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.
Jack Sleight
A: 

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.

Byron Whitlock
+1  A: 

(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 " . $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.

EMPraptor
I use file -b --mime-type $filename, but good answer!
icco