[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