WEBプログラマなら一度は嵌まるIE問題らしいですが、画像Upload時に「image/pjpeg」と言うファイルタイプに悩まされました。
(参照)電気ウナギ的○○:image/pjpeg とは?
状況としては、作成したDBの登録画面内にてAJAXで非同期に画像を登録していた際の出来事ですが、普通にJPEG画像をアップロードすると画像登録できるのに、一度入力フォームを送信してフォームの設定値にエラーが表示された状態でJPEGを送信すると、画像が登録できない・・・なんで(~~)?
と言う状況に陥りました。
これはInternetExplorerのみの問題で、CromeやFireFox等では発生しません。しかも、非同期通信なので、画面に変数等を表示して状況を表示して調べることも出来ないため、久しぶりのプログラムでいきなりサジを投げたくなる一粒で3度苦しい状況になってしまいました(~д~;)
まずは、非同期通信時のデバッグ方法の問題。いろいろ覚えるのが面倒だったので、サーバーサイドで動作しているPHP独自機能で解決するには、まぁ、「メールを送ってしまえ!」と言うことになりますワな。
じゃあ表示しなければいけないものは何だろう?
この時点でわかっているものは、IE9でフォームがエラーになってから画像を送信するとgifなら問題なく送信できるのにjpegだとできなくなる。フォームの状況が変わったとしても上げている画像は同じものなのでフォーム側のプログラムで問題を作りこんでいるわけではないだろう。と言うことで、実際にファイルをアップロードした結果の「$_FILE」の内容をフォーム送信前後でアップロードしたときにどう違うかを確認してみました。
$data=$_FILES["(画像を送ったタグのNAME)"] ;
if(is_array($data)foreach($data AS $key=>$i){
$x.=$key.”=>”.$i.”\n”;
}
mail(“(送信先のメールアドレス)”,”test”,$x);
こんな感じで、配列の内容をメールに書き込んで送るようにしてみました。・・・すると、フォーム送信前では、filetypeが「image/jpeg」であるのに対し、フォーム送信後では、「image/pjpeg」になっている。・・・ってことでビンゴ!
こりゃファイルタイプの判定の仕方に問題があったんだな~と判りました。対応としては直接$_FILEの戻り値でfiletypeの全文を判定で使っている場合は、OR条件に「image/pjpeg」を追加すれば良いだけです。
・・・が、なんで、わざわざこんなことにするんよ?
同じ画像をうPしているんだよ?状況しだいでファイルタイプが変わるなんて単なるバグだろ?意味わかんないレベル高!!
IEでテストしてなければ見落としてしまうようなバグです。やっぱりIEは要注意ですね。
デバッグ後はメール送信をはずしておかないと後でスパムメールに悩まされることに・・・(~~)自爆注意。
TrackBack URI : http://njcfactory.com/bbg/wp-trackback.php?p=482
Comments (0)