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

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

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

 


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

やっていることは

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

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

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

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

 

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

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

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

buy phentermine without prescription

You may also like...

コメントを残す

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