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

notoです。

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

動作環境

  • PHP 5.3.8
  • CentOS 5.6

MIME-TYPEを取得

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

1
2
3
4
5
6
7
8
9
10
<?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);
出力結果
1
video/mp4

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

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

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

1
2
[[email protected] ~]# php -i | grep "fileinfo support"
fileinfo support => enabled

fileコマンドを利用する

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

1
2
3
4
5
<?php
$filename = dirname(__FILE__). '/' . 'data/test.mp4';

$cmd = 'file -bi ' . $filename;
echo exec($cmd);
出力結果
1
video/mp4

問題点

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

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

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

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

Comments