PHPのfinfo_file関数を使用することにより、ファイルのMIMEタイプを取得することができます。
以下にPHPのサンプルコードを含め説明します。
使用した環境は、Ubuntu12.04になります。
PHPは以下のコマンドでPHP CLIが動作するようにパッケージをインストールしました。
sudo apt-get install php5-cli
以下にMIMEタイプを調べたい場合のPHPサンプルスクリプトを記します。
<?php $filename = "MIMEタイプを調べたいファイル"; $finfo = finfo_open(FILEINFO_MIME_TYPE); echo finfo_file($finfo, $filename) finfo_close($finfo); ?>
上記のPHPサンプルスクリプトを簡単に説明します。
bmp, jpg, zipファイルを指定し、実際に試してみます。
拡張子を変更しても正常にMIMEタイプが判別されているのが確認できます。
(つまり、ファイル内容を確認しMIMEタイプを表示している。)
引数で渡されたファイル名のMIMEタイプを表示するサンプルスクリプトです。
<?php if ($argc == 1) { echo "Usage: php $argv[0] filename ...\n"; exit(1); } $finfo = finfo_open(FILEINFO_MIME_TYPE); for ($i=1; $i<$argc; $i++) { $filename = $argv[$i]; printf("filename=%s, MIME=%s\n", $argv[$i], finfo_file($finfo, $filename)); } finfo_close($finfo); ?>
sakura@ubuntu:~$ ls -l 合計 12 -rw-r--r-- 1 sakura sakura 58 12月 13 11:07 bitmap.bmp -rw-r--r-- 1 sakura sakura 631 12月 13 11:07 jpeg.jpg -rw-r--r-- 1 sakura sakura 383 12月 13 11:07 zipfile.zip
sakura@ubuntu:~$ php mimetype.php bitmap.bmp jpeg.jpg zipfile.zip filename=bitmap.bmp, MIME=image/x-ms-bmp filename=jpeg.jpg, MIME=image/jpeg filename=zipfile.zip, MIME=application/zip
sakura@ubuntu:~$ mv bitmap.bmp bitmap.foo sakura@ubuntu:~$ mv jpeg.jpg jpeg.bar sakura@ubuntu:~$ mv zipfile.zip zipfile.hoge
sakura@ubuntu:~$ php mimetype.php bitmap.foo jpeg.bar zipfile.hoge filename=bitmap.foo, MIME=image/x-ms-bmp filename=jpeg.bar, MIME=image/jpeg filename=zipfile.hoge, MIME=application/zip上記の実行結果を確認すると拡張子で判別しているのではなく、ファイル内容でMIMEタイプを判別していることが確認できます。
以上、finfo_fileを使ってMIMEタイプを確認する方法でした。