Есть ли быстрое и грязное сопоставление типов MIME с расширениями на PHP, которые я могу использовать?
Не встроенный, но не очень сложно катиться самостоятельно:
function system_extension_mime_types() { # Returns the system MIME type mapping of extensions to MIME types, as defined in /etc/mime.types. $out = array(); $file = fopen('/etc/mime.types', 'r'); while(($line = fgets($file)) !== false) { $line = trim(preg_replace('/#.*/', '', $line)); if(!$line) continue; $parts = preg_split('/\s+/', $line); if(count($parts) == 1) continue; $type = array_shift($parts); foreach($parts as $part) $out[$part] = $type; } fclose($file); return $out; } function system_extension_mime_type($file) { # Returns the system MIME type (as defined in /etc/mime.types) for the filename specified. # # $file - the filename to examine static $types; if(!isset($types)) $types = system_extension_mime_types(); $ext = pathinfo($file, PATHINFO_EXTENSION); if(!$ext) $ext = $file; $ext = strtolower($ext); return isset($types[$ext]) ? $types[$ext] : null; } function system_mime_type_extensions() { # Returns the system MIME type mapping of MIME types to extensions, as defined in /etc/mime.types (considering the first # extension listed to be canonical). $out = array(); $file = fopen('/etc/mime.types', 'r'); while(($line = fgets($file)) !== false) { $line = trim(preg_replace('/#.*/', '', $line)); if(!$line) continue; $parts = preg_split('/\s+/', $line); if(count($parts) == 1) continue; $type = array_shift($parts); if(!isset($out[$type])) $out[$type] = array_shift($parts); } fclose($file); return $out; } function system_mime_type_extension($type) { # Returns the canonical file extension for the MIME type specified, as defined in /etc/mime.types (considering the first # extension listed to be canonical). # # $type - the MIME type static $exts; if(!isset($exts)) $exts = system_mime_type_extensions(); return isset($exts[$type]) ? $exts[$type] : null; }
Вы можете использовать mime_content_type
но он устарел. Вместо этого используйте fileinfo
:
function getMimeType($filename) { $finfo = finfo_open(FILEINFO_MIME_TYPE); $mime = finfo_file($finfo, $filename); finfo_close($finfo); return $mime; }
Если вы хотите использовать веб-сервис, я просто создал это как часть моей службы mimetype <->.
Например :
Он работает на appengine, поэтому он должен иметь высокую доступность.
Если вы работаете с ограниченным расширением изображений и нуждаетесь в чем-то очень простом, я думаю, этого достаточно.
switch($info['mime']) { case 'image/gif' : $extension = 'gif'; break; case 'image/png' : $extension = 'png'; break; case 'image/jpeg' : $extension = 'jpg'; break; default : throw new ApplicationException('The file uploaded was not a valid image file.'); break; }
Возможно, вы захотите использовать эту библиотеку: https://github.com/ralouphie/mimey
Пример использования:
$mimes = new \Mimey\MimeTypes; // Convert extension to MIME type: $mimes->getMimeType('json'); // application/json // Convert MIME type to extension: $mimes->getExtension('application/json'); // json
Это потому, что качество предоставляемых функций PHP сомнительно.
используйте этот файл: https://github.com/ralouphie/mimey/blob/develop/mime.types.php
как это :
$mimes=include('mime.types.php');
или копировать содержимое:
$mime= array ( 'mimes' => array ( 'ez' => array ( 0 => 'application/andrew-inset', ), 'aw' => array ( 0 => 'application/applixware', ), 'atom' => array ( 0 => 'application/atom+xml', ), 'atomcat' => array ( 0 => 'application/atomcat+xml', ) ...
и пример получения из потока:
$finfo = new \finfo(FILEINFO_MIME_TYPE); $mime=$finfo->buffer($data); $mimes=include(__DIR__."/mime.types.php"); echo ($mime); //mime echo ($mimes['extensions'][$mime]); // file extension
в$finfo = new \finfo(FILEINFO_MIME_TYPE); $mime=$finfo->buffer($data); $mimes=include(__DIR__."/mime.types.php"); echo ($mime); //mime echo ($mimes['extensions'][$mime]); // file extension