Вы можете использовать finfo вот так:
$mime = finfo_open(FILEINFO_MIME, $path_to_mime_magic_file);
if ($mime ===FALSE) {
throw new Exception ('Finfo could not be run');
}
$filetype = finfo_file($mime, $filename);
finfo_close($mime);
или если у вас есть проблемы с не установленным finfo, или просто не работает файл mime magic (он работает правильно на 3 из 4 наших серверов - все идентичные ОС и PHP устанавливаются) - тогда попробуйте использовать собственный файл Linux (не не забудьте очистить имя файла, хотя: в этом примере я знаю, что имя файла можно доверять, так как это временное имя файла PHP в моем тестовом коде):
ob_start();
system('file -i -b '.$filename);
$output = ob_get_clean();
$output = explode("; ", $output);
if (is_array($output)) {
$filetype = trim($output[0]);
}
Затем просто передайте тип файла MIME в оператор switch, например:
switch (strtolower($filetype)) {
case 'image/gif':
return '.gif';
break;
case 'image/png':
return '.png';
break;
case 'image/jpeg':
return '.jpg';
break;
case 'audio/mpeg':
return '.mp3';
break;
}
return null;