<?php
function load_mime_file($path)
{
$rg='/^((?:0x)?[\da-f]+)\s+(\w+)(?:[\&]((?:0x)?[\da-f]+))?\s+([\>\<\=\&\\^]?)((??:\\\\.)|[^\\\\\\s])*)\s+(.*)$/'; //
$r=file($path);
$result=array();
foreach($r as $row)
{
if(($row[0]=='#')||($row[0]=='>'))continue;
$match=array();
if(preg_match($rg,$row,$match))
{
$match[1]=$match[1]*1;
if(!$match[3]) $match[3]=0xffffffff; else $match[3]=$match[3]*1;
if(!$match[4]) $match[4]='=';
if($match[2]=='string')
{
$match[5]=stripcslashes($match[5]);
}else{
$match[5]=$match[5]*1;
}
array_push($result,$match);
}
}
return $result;
}
$mimemagic=load_mime_file($_SERVER['DOCUMENT_ROOT'].'/magic.mime');
function get_mime_type($file)
{
global $mimemagic;
$fl=fopen($file,'rb');
foreach($mimemagic as $mimeentry)
{
fseek($fl,$mimeentry[1],SEEK_SET);
if($mimeentry[2]=='string'){
$val=fread($fl,strlen($mimeentry[5]));
if($val==$mimeentry[5])return $mimeentry[6];
}else{
$val=null;
switch($mimeentry[2])
{
case 'byte': $val=@unpack('c',@fread($fl,1)); break;
case 'ubyte': $val=@unpack('C',@fread($fl,1)); break;
case 'short': $val=@unpack('s',@fread($fl,2)); break;
case 'ushort': $val=@unpack('S',@fread($fl,2)); break;
case 'leshort': $val=@unpack('v',@fread($fl,2)); break;
case 'uleshort':$val=@unpack('v',@fread($fl,2)); break;
case 'beshort': $val=@unpack('n',@fread($fl,2)); break;
case 'ubeshort':$val=@unpack('n',@fread($fl,2)); break;
case 'long': $val=@unpack('l',@fread($fl,4)); break;
case 'ulong': $val=@unpack('L',@fread($fl,4)); break;
case 'lelong': $val=@unpack('V',@fread($fl,4)); break;
case 'ulelong': $val=@unpack('V',@fread($fl,4)); break;
case 'belong': $val=@unpack('N',@fread($fl,4)); break;
case 'ubelong': $val=@unpack('N',@fread($fl,4)); break;
}
if(is_null($val))continue;
$val=$val[1];
$val&=$mimeentry[3];
switch($mimeentry[4])
{
case '=': if($val==$mimeentry[5]){ fclose($fl); return $mimeentry[6];} break;
case '>': if($val>$mimeentry[5]){ fclose($fl); return $mimeentry[6];} break;
case '<': if($val<$mimeentry[5]){ fclose($fl); return $mimeentry[6];} break;
case '&': if($val&$mimeentry[5]){ fclose($fl); return $mimeentry[6];} break;
case '^': if($val&(~$mimeentry[5])){fclose($fl); return $mimeentry[6];} break;
}
}
}
fclose($fl);
}
echo ':::'.get_mime_type($_SERVER['DOCUMENT_ROOT'].'/cursor.jpg').':::';
echo ':::'.get_mime_type($_SERVER['DOCUMENT_ROOT'].'/help_or.png').':::';
?>