Странно. Это стандартное расширение. Там заморочки с нахождением magic.mime. Можно финт ушами: есть переменная
$http_response_header которая означивается после операции
fopen и которую можно разобрать:
Код:

function GetHeaders($URL)
{
$Headers = array();
$F = @fopen ($URL, 'r');
@fclose($F);
$Headers['Error'] = array();
//var_dump($http_response_header);
foreach($http_response_header as $HItem)
{
if (strpos($HItem, 'Content-Length: ') !== false)
$Headers['Content-Length'] = substr($HItem, 16);
if (strpos($HItem, 'Not Found') !== false)
$Headers['Error']['404'] = 'Объект не найден. Ложная ссылка. (Ошибка #404)';
if (strpos($HItem, 'Date: ') !== false)
$Headers['Date'] = substr($HItem, 6);
if (strpos($HItem, 'Server: ') !== false)
$Headers['Server'] = substr($HItem, 8);
if (strpos($HItem, 'Content-Type: ') !== false)
$Headers['Mime'] = substr($HItem, 14);
}
if (!isset($Headers['Mime']))
$Headers['Mime'] = '';
else
{
if (!preg_match('/([\w]+\/[\w]+)/i', $Headers['Mime'], $Match))
$Headers['Mime'] = @mime_content_type($URL);
else
$Headers['Mime'] = $Match[1];
}
return $Headers;
}
Делалось когда-то для url'ов, но думаю, сойдет и тут. А
тут интересные грабли с mime_content_type. Может она заработает, с ней как-то приятнее дело иметь

.