PHPでメディアファイルのMIME-TYPEを取得する。

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

notoです。

phpでMIME TYPEの取得方法の備忘録です。
タイトルではメディアファイルと記載してますが、ファイル全般に適用できます。
しかし、問題点もあります。

 

動作環境

PHP 5.3.8
CentOS 5.6
 

MIME-TYPEを取得

サンプルとしてmp4のMIME TYPEを取得します。
 

<?php
$filename = dirname(__FILE__). '/' . 'data/test.mp4';

if(false === ($finfo = finfo_open(FILEINFO_MIME_TYPE)){
    throw new Exception('Finfo could not be open');
}

$mimetype = finfo_file($finfo, $filename);
echo $mimetype;
finfo_close($finfo);
?>

 

出力結果

video/mp4

 

finfo_openは、php5.3からサポートされています。
php5.3より下のバージョンを使用している場合は、PECLのFileinfoモジュールをインストールすることで、finfo_open関数を利用できます。

 

Fileinfoがサポートされているかの確認

以下のコマンドでFileinfoがサポートされているか確認することができます。

[root@localhost ~]# php -i | grep "fileinfo support"
fileinfo support => enabled

 

fileコマンドを利用する

linuxのfileコマンドを利用することで、MIME TYPEを取得する方法もあります。

<?php
$filename = dirname(__FILE__). '/' . 'data/test.mp4';

$cmd = 'file -bi ' . $filename;
echo exec($cmd);

 

出力結果

video/mp4

 

問題点

finfo_open fileコマンド共に、/usr/share/misc/magicに定義されていないファイルは正確にMIME TYPEを判別できない。
finfo_openは、マジックファイルを指定することは可能。

 

getID3 (The PHP media file parser) を利用する

mp4などのメディアファイルのより詳細な情報を取得したい場合、getID3を利用することで、デュレーション情報等取得することができます。

商用で利用される場合は、有料となってますのでご注意を。

    • さかい
    • 2012 01/06 9:53am

    finfo_openって関数名、むっちゃわかりずらいねw
    あけましておめでとうございます

    • noto
    • 2012 01/06 7:20pm

    あけましておめでとうございます。
    新年会でもやろうず。

return top