Home » Tools and Utilities » MIME_Type » Bug #3719
autodetect: If mime_content_type fails, _fileAutoDetect should still be used
Details
| Request #3719 | autodetect: If mime_content_type fails, _fileAutoDetect should still be used |
|---|---|
| Submitted | 2005-03-06 06:39 UTC |
| From | scragz at hotmail dot com |
| Assigned | cweiske |
| Status | Closed |
| Package | MIME_Type |
| PHP Version | 4.3.9 |
| OS | SuSE Linux 9.2 |
| Roadmaps | (Not assigned) |
Comments
[2005-03-06 06:39 UTC] scragz at hotmail dot com
Description:
------------
I don't know if something's up with my PHP installation, but when trying to detect the MIME type of a MIDI file, mime_content_type is returning false while _fileAutoDetect is returning "audio/unknown\011".
So, basically I'm proposing that all available tools be attempted until one of them succeeds.
Reproduce code:
---------------
instead of:
if (function_exists('mime_content_type')) {
$type = mime_content_type($file);
maybe:
if (function_exists('mime_content_type') && ($type = mime_content_type($file))) {
// detected
[2006-04-30 14:40 UTC] o dot persson at gmail dot com
I read this in a DEPRECATED note for mime_magic: "This extension is deprecated, please use the fileinfo extension from PECL instead.".
Maybe something like this would work (finfo can be used as a class too):
Index: ../../components/PEAR/MIME/Type.php
===================================================================
--- ../../components/PEAR/MIME/Type.php (revision 682)
+++ ../../components/PEAR/MIME/Type.php (working copy)
@@ -328,14 +328,23 @@
*/
function autoDetect($file, $params = false)
{
- @include_once 'System/Command.php';
- if (function_exists('mime_content_type')) {
+ $type = false;
+ if (function_exists('finfo_open')) {
+ $finfo = finfo_open(FILEINFO_MIME);
+ $type = finfo_file($finfo, $file);
+ finfo_close($finfo);
+ }
+ if ($type === false && function_exists('mime_content_type')) {
$type = mime_content_type($file);
- } else if (class_exists('System_Command')) {
- $type = MIME_Type::_fileAutoDetect($file);
- } else {
- return PEAR::raiseError("Sorry, can't autodetect; you need the mime_magic extension or System_Command and 'file' installed to use this function.");
}
+ if ($type === false) {
+ @include_once 'System/Command.php';
+ if (class_exists('System_Command')) {
+ $type = MIME_Type::_fileAutoDetect($file);
+ } else {
+ return PEAR::raiseError("Sorry, can't autodetect; you need the finfo extension, mime_magic extension or System_Command and 'file' installed to use this function.");
+ }
+ }
// _fileAutoDetect() may have returned an error.
if (PEAR::isError($type)) {