Fileinfo 関数が使えない環境で MIME Type を判定したいときに。

function my_check_mime_type( $tmp_name ) {
	$bin_data = bin2hex ( file_get_contents ( $tmp_name ) );
	$patt = array (
		'89504e47' => 'image/png',
		'ffd8' => 'image/jpeg',
		'47494638' => 'image/gif',
	);
	foreach ( $patt as $mgk_num => $mime_type ) {
		if ( strpos ( $bin_data, "{$mgk_num}" ) === 0 )
			return $mime_type;
	}
	return false;
}
echo ( $mime_type = my_check_mime_type( $_FILES['file']['tmp_name'] ) ) ? $mime_type :  '不明なファイル形式';

マジックナンバーの参考:https://qiita.com/forestsource/items/15933888466ba9c3f048

Fileinfo 関数が使える環境ならたったのこれだけなので、是非インストールしておきたいモジュール。

$tmp_name = $_FILES['file']['tmp_name'];
$finfo = new finfo ( FILEINFO_MIME_TYPE );
$mime_type = $finfo->file( $tmp_name );
echo $mime_type;