I've written an alternative for this. Not necessarily tested but it works OK on my server.
I hope this helps
<?
/**
* Tries to get mime data of the file.
* @return {String} mime-type of the given file
* @param $filename String
*/
function get_mime($filename){
preg_match("/\.(.*?)$/", $filename, $m); # Get File extension for a better match
switch(strtolower($m[1])){
case "js": return "application/javascript";
case "json": return "application/json";
case "jpg": case "jpeg": case "jpe": return "image/jpg";
case "png": case "gif": case "bmp": return "image/".strtolower($m[1]);
case "css": return "text/css";
case "xml": return "application/xml";
case "html": case "htm": case "php": return "text/html";
default:
if(function_exists("mime_content_type")){ # if mime_content_type exists use it.
$m = mime_content_type($filename);
}else if(function_exists("")){ # if Pecl installed use it
$finfo = finfo_open(FILEINFO_MIME);
$m = finfo_file($finfo, $filename);
finfo_close($finfo);
}else{ # if nothing left try shell
if(strstr($_SERVER[HTTP_USER_AGENT], "Windows")){ # Nothing to do on windows
return ""; # Blank mime display most files correctly especially images.
}
if(strstr($_SERVER[HTTP_USER_AGENT], "Macintosh")){ # Correct output on macs
$m = trim(exec('file -b --mime '.escapeshellarg($filename)));
}else{ # Regular unix systems
$m = trim(exec('file -bi '.escapeshellarg($filename)));
}
}
$m = split(";", $m);
return trim($m[0]);
}
}
?>
mime_content_type
(PHP 4 >= 4.3.0, PHP 5)
mime_content_type — Detect MIME Content-type for a file (deprecated)
Description
string mime_content_type
( string $filename
)
Returns the MIME content type for a file as determined by using information from the magic.mime file.
Parameters
- filename
-
Path to the tested file.
Return Values
Returns the content type in MIME format, like text/plain or application/octet-stream.
Notes
Warning
This function has been deprecated as the PECL extension Fileinfo provides the same functionality (and more) in a much cleaner way.
Examples
Example #1 mime_content_type() Example
<?php
echo mime_content_type('php.gif') . "\n";
echo mime_content_type('test.php');
?>
The above example will output:
image/gif text/plain
mime_content_type
serkanyersen
29-Apr-2008 04:22
29-Apr-2008 04:22
mami at madagascarsurlenet dot com
14-Nov-2007 06:58
14-Nov-2007 06:58
Since I enabled the mime_magic extension on my IIS, I also got the error message "invalid magic file, disabled" in my phpinfo. After I add these lines to my php.ini, the message disappeared and it works great!
mime_magic.debug = Off
mime_magic.magicfile ="D:\PHP5\extras\magic.mime"
mime_magic.debug is by default off but without this line it fails. I'm using PHP 5.2.5.
Sune Jensen
29-Aug-2007 05:16
29-Aug-2007 05:16
For me mime_content_type didn't work in Linux before I added
mime_magic.magicfile = "/usr/share/magic.mime"
to php.ini (remember to find the correct path to mime.magic)
dt at php dot net
14-Jun-2007 04:18
14-Jun-2007 04:18
<?php
if (!function_exists('mime_content_type ')) {
function mime_content_type($filename) {
$finfo = finfo_open(FILEINFO_MIME);
$mimetype = finfo_file($finfo, $filename);
finfo_close($finfo);
return $mimetype;
}
}
?>
Quis at IHAVEGOTSPAMENOUGH dot omicidio dot nl
12-Feb-2007 05:28
12-Feb-2007 05:28
<?PHP
function qmimetype($file) {
$ext=array_pop(explode('.',$file));
foreach(file('/usr/local/etc/apache22/mime.types') as $line)
if(preg_match('/^([^#]\S+)\s+.*'.$ext.'.*$/',$line,$m))
return $m[1];
return 'application/octet-stream';
}
?>
Not perfect, but works good enough for me ;)
tree2054 using hotmail
04-Nov-2006 01:59
04-Nov-2006 01:59
The correct little correction:
exec will return the mime with a newline at the end, the trim() should be called with the result of exec, not the other way around.
<?php
if ( ! function_exists ( 'mime_content_type ' ) )
{
function mime_content_type ( $f )
{
return trim ( exec ('file -bi ' . escapeshellarg ( $f ) ) ) ;
}
}
?>
16-Oct-2006 03:06
if you use a transparent 'spacer' GIF i've found it needs to be a around 25x25 for it to register as 'image/gif'. otherwise it's read in as 'text/plain'.
webmaster at cafe-clope dot net
23-Feb-2006 01:31
23-Feb-2006 01:31
Completing <some dude AT somewhere DOT com> comment:
0 string < ? php application/x-httpd-php
and string detection on text files may fail if you check a file encoded with signed UTF-8. The UTF-8 signature is a two bytes code (0xFF 0xFE) that prepends the file in order to force UTF-8 recognition (you may check it on an hexadecimal editor).
Y0Gi
25-Jan-2006 07:13
25-Jan-2006 07:13
The 'file' utility fortunately is available for Windows, too:
http://gnuwin32.sourceforge.net/packages/file.htm
some dude AT somewhere DOT com
07-Oct-2005 05:44
07-Oct-2005 05:44
I added these two lines to my magic.mime file:
0 string \<?php application/x-httpd-php
0 string <?xml text/xml
The first one may not work if "<?php" is not at the very beginning of your file, e.g., if some HTML preceeds the first bit of PHP code. The second one should work because "<?xml" *should* be the first thing in every XML file.
ginnsu at arcee dot ca
09-Mar-2005 06:14
09-Mar-2005 06:14
The function mime_content_type only worked for me on Microsoft Windows after I added the directive "mime_magic.debug" to my php.ini with the value of "On". The default value appears to be "Off". Exampe:
[mime_magic]
mime_magic.debug = On
mime_magic.magicfile = "c:\php\extras\magic.mime"
