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

Moriyoshi Koizumi php-users@php.gr.jp
Sun, 23 Jun 2002 07:37:18 +0900


小泉@町田です。

当該ファイルが画像に限定される場合は GetImageSize 関数があります。
大抵はこれでいいんじゃないでしょうか。

画像でない場合、
ファイル形式の特徴的な部分から MIME タイプを判断するというのがあります。
仕組みについては magic の man ページでも。

Apache の mod_mime_magic を手本にした、mime_magic というモジュールが
CVS にあります。実験的なモジュールのため、たぶんドキュメント化されてないです。

string mime_content_type( string filename )

以前試したときは、こんな関数が利用可能で、機能としては、ファイル名を与えると
そのファイルのMIMEタイプが返ってくるようなものだったと思います。
phpize したりして組み込んでしまうのが手っ取り早いかもしれません。

今のものは新しいビルドシステムや新しいストリームの仕組みとの整合性を
取ってありそうなので、すんなりいけるかどうかは試してないので分かりません…。

http://cvs.php.net/cvs.php/php4/ext/mime_magic

なにか参考になれば。


Masaki Kudo <kudo@dcr.tbs-v.co.jp> wrote:

> 件名:ファイルアップロード処理時の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
> 
> _______________________________________________
> PHP-users mailing list
> PHP-users@php.gr.jp
> http://ns1.php.gr.jp/mailman/listinfo/php-users