人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

【PHP】ファイルをアップロードするとします。$_FILES['userfile']['type']はアップロードする側のマシン環境に依存するらしいのですが、例えば、GIFファイルをアップロードして、$_FILES['userfile']['type']で取得するMIMEタイプをimage/gif以外にするためには、アップロードする側のマシンでどのような操作をすればよいでしょうか?

●質問者: 敷守ほむら
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:GIF MIME PHP アップロード タイプ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● 牛乳先生(tukihatu)
●20ポイント

上記の質問の内容はおそらくできないと思います。(アップロードした時のmineタイプを変えるということですよね?)

$_FILES['userfile']['type']がサーバ依存というのは初めて聞きました。自分勉強不足ですね…

いまいちやりたいことが読めないのですが、

GIFをアップロード

GDライブラリ等で任意の画像形式に変更してサーバに保存

読み込み


などで同じことができると思います。

http://www.sakura-pc.jp/php/gd.shtml

GD、pecl、ImageMagickなどをサーバにインストールして、upしたものを参考に新しいファイルを作る手法です。

あと無理やりですが、UPしたデータをテキストで読み、頭のminetypeを書き換えてしまえば、そのファイル形式で読んでくれると思います。おそらく表示はgifのままでしょうけど。

◎質問者からの返答

それが、実際に事例としてあったために困っているんです…。

プログラム側のMIMEタイプチェック(今回質問した$_FILES['userfile']['type']でのチェックでした)で正常であるはずのファイルをはじいたログが取れてしまったのです。アップロードした側のブラウザがIE7だということまで把握しています。

tukihatuさんのやり方ですと、PHPプログラム側を変更しないといけません。


2 ● rouge_2008
●60ポイント ベストアンサー

$_FILES['userfile']['type']によるチェックは信用できないそうです。

ファイルの拡張子を変更するだけで、別の形式として認識されてしまいます。

GIFファイルの拡張子を別の物に変更した場合も、「image/gif」以外として認識されます。

$_FILES['userfile']['type']によるチェックしか行っていないのですか?

別のチェックも行っていて、そちらの方ではじいたのではないでしょうか?

拡張子を変更したファイルをアップロードできるか、確認してみてください。

アップロードできない場合は、スクリプトとして安全だと思いますので、そのままで良いと思います。

ユーザーの利便性を考える場合、アップロード不可の理由をメッセージ表示した方が親切だと思いますが、もちろんPHPプログラム側の変更が必要になります。

アップロードできた場合は、別の理由ではじいたことになりますが、ファイルサイズなど別の条件でチェックしていないでしょうか?


http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1019135...


※getimagesize()のキー2で、画像の形式を取得できます。

ただし、偽装されたファイルも間違って画像として認識してしまうようです。

http://kikky.net/pc/php_form_file.html

http://nyx.pu1.net/function/image/getimagesize.html

◎質問者からの返答

$_FILES['userfile']['type']のチェックの前に、$_FILES['userfile']['error']のチェックをかけて、問題がない場合に$_FILES['userfile']['type']のチェックを行うようにしていました。getimagesize()はそのチェックの後の処理で行おうとしていました。

別のチェックではじいた場合にはそこではじいたと判るようにログを取っているため、原因は$_FILES['userfile']['type']だというところまで判っています。

拡張子を変更したファイルは当然アップロードできません。これはデバッグの段階で確認済みでした。

アップロード不可の理由はメッセージ表示していたのですが、ユーザーの方から、正しいファイルをアップしたはずなのになぜファイル形式が違うというメッセージが出るのか、という問い合わせを受けたものですから・・・

ファイルタイプが信用できないというのは今回見直しをしている段階で気づいたのですが、実際にアップロードしてMIMEタイプが変わる場合が再現できなかったため、今回の質問になりました。

コメント欄でのやりとりで解決しましたので、rouge_2008さんにいるかを差し上げます。ポイントも若干多めに配分しました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ