phpかperlで、WindowsMobileのブラウザからアクセスがあれば別のページへ振り分ける仕組みを作りたいのですが、どのようにすればよいでしょうか?

なお、WindowsMobileで用いるブラウザは、IEはもちろんOperaであろうがFennecであろうが、その他のブラウザでもWindowsMobileならWindowsMobileと正しく認識して、WindowsMobile向けのページへ誘導したいと考えています※。
※ですので、UserAgentを基準で振り分けるのでは上手くいかないかもと考えています。
サーバのOSはOSはWindowsXP・Apacheです。
自分で管理していますので、PerlやPHPのバージョンやモジュールは自由に設定することができます。
よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:2009/10/16 15:30:13
  • 終了:2009/10/23 15:35:02

回答(1件)

id:horonict No.1

horonict回答回数257ベストアンサー獲得回数512009/10/16 16:54:35

ポイント60pt

環境変数HTTP_UA_OSに"Windows CE (Pocket PC)"という値が入ってきます。

http://www.nagaoka.jrc.or.jp/cgi-bin/env/envcheck.cgi

id:halohalolin

horonictさんありがとうございます。

WindowsMobile端末の一つであるHT01Aに標準搭載されているOperaから以下の方法で調べてみましたが・・・

Notice: Undefined index: HTTP_UA_OS in (ファイルの位置) on line 1

というエラーが発生します。

確かにInternet Explorerなら値を取得できるのですが、それだけでは条件を満たしていませんので、別の方法をご存知でしたら教えてください。

よろしくお願いします。

※判定方法にJavaScriptを利用するのでもOKです(但し分岐を片っ端から用意するのは同じくNGです)。

よろしくお願いします。

2009/10/16 17:08:15
  • id:halohalolin
    なお、phpのHTTP_USER_AGENTを、WindowsMobile端末の一つであるHT01Aに標準搭載されているOperaで調べてみますと

    HT01A Opera/9.50 (Windows NT 5.1; U; ja)

    というような結果が出力されます。
    ですので、HTTP_USER_AGENT内に「Windows CE」が含まれているかどうかという返答はご遠慮ください。
  • id:halohalolin
    また、ブラウザや端末の数だけUSER_AGENTの分岐を片っ端から用意するという手もありますが
    そういったご返答も申し訳ないですがご遠慮ください。
  • id:koujirou6218
    PHPかPerlですと、ユーザはブラウザで実行する必要があるのは既知だと思います。
    UAを除けば、後はIPだけではないでしょうか。
    IPアドレス帯域を調べて処理するしかないでしょう。後は無理だと思いますがJavaを実行させるか。
    スマートフォンと3GのIP帯域が同じでしたらだめですけど。
  • id:halohalolin
    koujirou6218さんありがとうございます。
    IPアドレスを調べる方法ですと「ならWifiからアクセスした場合はどうか」という問題が発生すると思います。

    最終的に行いたいことは、端末の種類ごとに最適なソフトのダウンロードページへ誘導したいのです。
    ですので、ユーザーの慣れ親しんでいるブラウザを利用して識別したいと考えています(ですのでScriptでない方のJavaの利用」は不可です)。
    ※「だったらWindows Marketplace for Mobileを使えばよいのでは・・・」という返答は、Microsoftが過去端末にもWindowsMobile Updateを導入してくださるまでご遠慮ください。

    しかし、その最初の最初で詰まっているので困っている状態です。
    よろしくお願いします。
  • id:horonict
    > 別の方法をご存知でしたら教えてください。

    PHPだと UA-OS または Ua-Os に入りませんか?
    下記のスクリプトで確認してみてください。
    $arr = getallheaders();
    foreach ($arr as $key=>$val) print $key . " : " . $val . "<br />\n";
  • id:halohalolin
    horonictさん、何度もありがとうございます。
    頂いたスクリプトについて、とりあえずすぐに試せる手持ちのHT01AにおけるOperaとIEの結果を載せてみます。
    結論としましては、Operaから動作させると、UA-OSの類は挿入されないようです。

    ※Host欄は消しています

    【Operaの場合】
    User-Agent : HT01A Opera/9.50 (Windows NT 5.1; U; ja)
    Accept : text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
    Accept-Language : ja-JP,ja;q=0.9,en;q=0.8
    Accept-Charset : iso-8859-1, utf-8, utf-16, *;q=0.1
    Accept-Encoding : deflate, gzip, x-gzip, identity, *;q=0
    Connection : Keep-Alive

    【IEの場合】
    Accept : */*
    Accept-Language : ja
    UA-OS : Windows CE (Pocket PC) - Version 5.2
    UA-color : color16
    x-wap-profile : "http://www.htcmms.com.tw/gen/raphael-1.0.xml"
    UA-Voice : TRUE
    UA-pixels : 320x240
    UA-CPU : ARM
    Accept-Encoding : gzip,deflate
    User-Agent : Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 7.11) HT01A
    Connection : Keep-Alive
  • id:halohalolin
    用意するアプリがHT01A専用なら、HT01Aの有無で調べればよい?のでしょうが・・・これからのことを考えますと
    「機種毎に特化されたバージョンをダウンロードできるページ」と「その他のWindowsMobile向けのページ」が用意できるようにしたいので
    「その他のWindowsMobile端末のブラウザからアクセスされている」という方法をご存知の方は教えてください。
    よろしくお願いします。

この質問への反応(ブックマークコメント)

トラックバック

  • これは何気に良回答と言わざるをえません。 horonict さん、さすがです〜。 (私は WindowsMobile を持っていないのでできないので確認できませんが)
「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません