[PHP-users 8206] ファイルアップロード処理時のMIMEタイプ

Masaki Kudo php-users@php.gr.jp
Sun, 23 Jun 2002 04:33:52 +0900


件名:ファイルアップロード処理時のMIMEタイプ

ファイルアップロード処理時のMIMEタイプを取得しているのですが、アップロード時に
使用するブラウザによってMIMEタイプが異なる現象に気が付きました。

PHP本サイトのドキュメント 「第 19 章 ファイルアップロードの処理」
http://www.php.net/manual/ja/features.file-upload.php

同じことに気が付いた方が、上記ページの「User Contributed Notes」にも投稿されて
います(26-Feb-2002 08:13の記事)。

それでどういう現象かといいますと、

PHPでは、ファイルアップロードに成功した場合、$HTTP_POST_FILESまたは$_FILES変数が、
コールされるスクリプトで定義されますよね。そして、

$HTTP_POST_FILES['アップロードファイル名']['type']

で、アップロードされたファイルのMIMEタイプを取得できるのですが、それが使用する
ブラウザによって入ってくる値が異なる場合があるのです。例えば、MP3ファイルを
アップロードした場合、IEでは「audio/wav」、ネットスケープ6では「audio/mpeg」
だったりします。使用するブラウザのMIME設定による値が入ってくるわけですね。

ということで、ユーザーからブラウザ経由でファイルアップロードを行わせるプログラム
をPHPで作成した場合、どのようなファイルがアップロードされたかをチェックする際に、
MIMEタイプでの判定が確実にはできないということになります。

するとファイルのMIMEタイプを判定するのに、ファイルの拡張子で判断するとか、ファ
イルがアップロードされたサーバ側で判断するといった別の方法を取らないと駄目だと
いうことになるかと思います。その場合、いったいどのような方法が考えられるので
しょう?

それとも、そもそもファイルの種別をMIMEタイプで判定すること自体に無理があるという
ことなのでしょうか?

どなたかご見識の方がいらっしゃいましたら、どうぞよろしくご教授お願いいたします。
------
Masaki Kudo