Я пишу скрипт, и мне нужно правильно (я думаю, что некоторые типы mime могут отличаться от их расширений) получают типы mime-файлов (файлы могут быть любого типа).
Используемая веб-хостинг-компания не имеет mime_content_type()
и все еще (не знаю, в каком году они будут ее исправлять), обещая исправить альтернативу PECL.
Каким другим способом я могу это сделать (и у меня нет доступа к командам оболочки)?
Вы можете попробовать finfo_file – он возвращает тип mime.
Я использую следующую функцию, которая является оберткой для 3 наиболее распространенных методов:
function Mime($path, $magic = null) { $path = realpath($path); if ($path !== false) { if (function_exists('finfo_open') === true) { $finfo = finfo_open(FILEINFO_MIME_TYPE, $magic); if (is_resource($finfo) === true) { $result = finfo_file($finfo, $path); } finfo_close($finfo); } else if (function_exists('mime_content_type') === true) { $result = mime_content_type($path); } else if (function_exists('exif_imagetype') === true) { $result = image_type_to_mime_type(exif_imagetype($path)); } return preg_replace('~^(.+);.+$~', '$1', $result); } return false; }
$ _FILES ['file'] ['type'] поступает из браузера, который загружает файл, чтобы вы не могли полностью полагаться на это значение.
Проверьте файл finfo_file для идентификации типов файлов на основе содержимого файла. Расширение файла также ненадежно, так как пользователь может загружать вредоносный код с расширением mp3.