MIMEタイプを取得するPHP関数のまとめ

  • このエントリーをはてなブックマークに追加
  • このエントリーをはてなブックマークに追加

今回は小ネタで行きます。

PHPで意外と情報のないMime Typeの取得関数を作ってみました。

 



      function getMimeType($path){
           $mimeTypeList = array(
               'jpg'   => 'image/jpeg',
               'jpeg'  => 'image/jpeg',
               'jp2'   => 'image/jp2',
               'png'   => 'image/png',
               'gif'   => 'image/gif',
               'bmp'   => 'image/bmp',
               'ai'    => 'application/postscript',
               'txt'   => 'text/plain',
               'csv'   => 'text/csv',
               'tsv'   => 'text/tab-separated-values',
               'doc'   => 'application/msword',
               'xls'   => 'application/vnd.ms-excel',
               'ppt'   => 'application/vnd.ms-powerpoint',
               'pdf'   => 'application/pdf',
               'xdw'   => 'application/vnd.fujixerox.docuworks',
               'htm'   => 'text/html',
               'html'  => 'text/html',
               'css'   => 'text/css',
               'js'    => 'text/javascript',
               'hdml'  => 'text/x-hdml',
               'mp3'   => 'audio/mpeg',
               'mp4'   => 'audio/mp4',
               'wav'   => 'audio/x-wav',
               'mid'   => 'audio/midi',
               'midi'  => 'audio/midi',
               'mmf'   => 'application/x-smaf',
               'mpg'   => 'video/mpeg',
               'mpeg'  => 'video/mpeg',
               'wmv'   => 'video/x-ms-wmv',
               'swf'   => 'application/x-shockwave-flash',
               '3g2'   => 'video/3gpp2',
               'zip'   => 'application/zip',
               'lha'   => 'application/x-lzh',
               'lzh'   => 'application/x-lzh',
               'tar'   => 'application/x-tar',
               'tgz'   => 'application/x-tar',
               //'tar'   => 'application/octet-stream',
               //'tgz'   => 'application/octet-stream',
           );
           if(function_exists("finfo_file")){
                $mimetype = finfo_file($finfo, $path);
                finfo_close($finfo);
                return $mimetype;
           }else{
                $info = pathinfo($path);
                if(isset($info["extension"]) && isset($mimeTypeList[$info["extension"]])){
                       return $mimeTypeList[$info["extension"]];
                }else if(!function_exists('mime_content_type')){
                       return exec('file -Ib '.$path);
                }else{
                       // 非推奨
                       return mime_content_type($path);
                }
           }
      }

やっていることは

1.PHP5.3から使用できるfinfo_file()を使えたら使用する。

2 . 上記がダメなら拡張子から判別

3. さらにダメならmime_content_type()で取得(ただしこの関数は非推奨関数です)

4. それでもだめならexec()でLinuxコマンドで取得

 

ただし注意点としてfinfo_fileは一度ファイルを読み込むため、ファイルサイズが大きいとその分処理に時間がかかります。

わたし的にあまり気に入らないのですが、拡張子からMIME TYPEを取得するのが一番無難かもしれません。

ほかにいい方法知っている賢者の方いましたらおしえてくださーい♪

You may also like...

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です