BeginnerEngineerBlog
中の人
中の人

【php finfo】ファイルのmimetypeをちゃんと判定する

公開: 2022-09-16 19:11
更新: 2023-04-05 23:23
1321
php finfo mimetype
拡張子と違うファイルタイプを判定する方法です。

こんにちは!

中の人です。

ファイルアップロードてリスクいっぱいで、色々とバリデーションを実装することになると思います。

メモ程度ですが、拡張子が本来のファイルタイプと違うファイルから、本来のファイルタイプを判定する方法を紹介します。


finfoクラス


このクラス使うとちゃんとファイルタイプを判定してくれます。

今回、pngファイルを圧縮して、zipファイルの拡張子を変えて挙動を確認してみます。

正常な場合


<?php

$file = $_FILES['file'];
// $file['name'] -> 'beginner_engineer_blog.png.zip'
// $file['type'] -> 'application/zip' 👈
// $file['tmp_name'] -> '/tmp/phpO4eQDg'
// $file['error'] -> 0
// $file['size'] -> 12345

$finfo = new finfo(FILEINFO_MIME_TYPE);
$mime_type = $finfo->file($file['tmp_name']);
// $mime_type -> 'application/zip' 👈

$_FILESのtypeと、finfoのmime_typeが一致してますね。
多分問題ないでしょう。

異常な場合


そしたら先ほどのzipファイルを.jpgに変えてアップロードしてみます。

<?php

$file = $_FILES['file'];
// $file['name'] -> 'beginner_engineer_blog.png.jpg'
// $file['type'] -> 'image/jpeg' 👈
// $file['tmp_name'] -> '/tmp/phpoiB7h1'
// $file['error'] -> 0
// $file['size'] -> 12345

$finfo = new finfo(FILEINFO_MIME_TYPE);
$mime_type = $finfo->file($file['tmp_name']);
// $mime_type -> 'application/zip' 👈

$_FILESのtypeは
image/jpeg

ですが、finfoのmime_typeは
application/zip

のままですね!

おー(゚∀゚ )


終わりに


今回紹介したやり方以外でも判定することできるみたいですので、気になった方はいろいろ調べてみましょう!

以上です。

お疲れした!
0
0
0
0
通信エラーが発生しました。
【広告】
似たような記事