<< PHP と DB と NUMERIC 〜暗黙の型変換の罠〜 | main | ただいまEZweb情報サービスへの接続がしづらい状況となっております。 >>

ダウンロードできない <object>タグ 〜au Sシリーズの罠〜

「Flash がダウンロードできません><」

とある W32S ユーザからのサポートメール。

au端末には <object>タグを記述して Flash ダウンロードさせています。

<object data="http://example.com/download.php?path=path%2Fto%2Fflash.swf"
    type="application/x-mpeg" copyright="no" standby="ダウンロード">
<param name="disposition" value="devfl7z" valuetype="data" />
<param name="size" value="97061" valuetype="data" />
<param name="title" value="フラッシュ" valuetype="data" />
</object>

Flashファイルが DocumentRoot 以下になく, 色々処理をさせるために download.php を介してファイル出力するような形式。
Flashファイルの場所は pathパラメータで URLエンコードして渡しています。

もちろん事前に複数の機種でダウンロードができることを確認済みです。
しかし検証チームに W42S で確認してもらったところ, ダウンロードできない現象が再現。

同じ Sシリーズ...これは怪しい。
“まずはログより始めよ。”の格言通りアクセスログを確認。

正常にダウンロードできている他の端末と W32S のアクセスログを比較してみると...

・正常な端末
GET /download.php?path=path%2Fto%2Fflash.swf ... 200 97061

・W32S
GET /download.php?path=path%252Fto%252Fflash.swf ... 200 5

W32S のログが明らかにおかしい。
path パラメータが勝手に URLエンコードされているじゃないですか。
# urlencode('%') → %25

au の <object>タグの説明ページには data属性の正確な定義は記載されていませんが, パラメータを勝手に URLエンコードしてくれるとは大きなお世話(というかバグなんじゃ?)。
ざっと確認したところ, W32S〜W42S あたりの au Sシリーズ機種でこの現象が発生するようです。
私の W44S では発生しなかったことから, W43S か W44S で修正されたのでしょう...

pathパラメータがおかしくなっていたのでファイルがダウンロードできるはずがありません。
ファイルの場所を GETパラメータではなく, PATH_INFO で取得するように修正したら W32S, W42S でも正常にダウンロードできるようになりました。

<object data="http://example.com/download.php/path/to/flash.swf"
    type="application/x-mpeg" copyright="no" standby="ダウンロード">...


au の <object>でのダウンロードの実装はご注意下さい。
携帯は機種毎にブラウザの実装が違うからホントーに厄介です。

携帯サイト開発ってバッドノウハウばかりたまっていくなぁ(´-`)
はてブへ追加 この記事のはてブユーザ
Tech > Mobile | comments (0) | - | pagetop↑

Comments

Post your Comment