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がサポートされているか確認することができます。
[[email protected] ~]# 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を利用することで、デュレーション情報等取得することができます。
商用で利用される場合は、有料となってますのでご注意を。
finfo_openって関数名、むっちゃわかりずらいねw
あけましておめでとうございます
あけましておめでとうございます。
新年会でもやろうず。