ノリブログ?

携帯の機種ごとのディスプレイサイズをUserAgentから取得

カテゴリー:Web

携帯電話の画面サイズを取得する処理を作る必要がでたので、3つのライブラリを試してみました。
その結果をまとめておきたいと思います。

HTTP::MobileAgentモジュール

  HTTP::MobileAgent  

CPANで配布されている、携帯機種の情報を取得するためのモジュール

ライセンス

Perl 自体と同じ条件の元,再配布及び/又は修正可能

導入方法

CPANからインストール

      perl -MCPAN -e shell
      cpan> install HTTP::MobileAgent

画面サイズ取得例


       #! /usr/bin/perl
       print "Content-type:text/html ";
       use HTTP::MobileAgent;
       $agent = HTTP::MobileAgent->new($ENV{'HTTP_USER_AGENT'});
       my $display = $agent->display;
       print "width:  ",$display->width,"<br>";
       print "height: ",$display->height,"<br>";

実際の結果


DoCoMo SH700iS(240×320ドット)

  • widthは液晶のサイズと一致しているがheightが320と252で全く違う値になっていた。
  • これはSH700iSの画面サイズは240×320ドットであるが、ブラウザ表示時の画面領域が240×252dotであるため
  • 参考:iモードブラウザの画面領域

SoftBank 904SH(640×480ドット)

  • width,heightどちらも表示されず

 

phone.pl

phone.pl 携帯電話キャリア自動判別ライブラリ 

アクセスしてきているブラウザ情報から、携帯電話キャリアや細かな機種情報を自動判別するためのライブラリ。phone.plを設置して呼び出すだけで使用可能。

ライセンス

表記がなかったため問い合わせたところ「商用でもGPLでも、ご自由にお使いいただいて構いません。」とのことでした。

導入方法

phone.plをダウンロード

画面サイズ取得例


      #! /usr/bin/perl
      print "Content-type:text/html ";
      require "phone.pl";
      my $phone = &phone_info();
      print "width:  ",$phone->{width},"<br>";
      print "height:  ",$phone->{height};

実際の結果


DoCoMo SH700iS(240×320ドット)

  • widthは240,heightは表示されず

SoftBank 904SH(640×480ドット)

  • width:640,height:480

 

PEAR:Net_UserAgent_Mobile

 Package Information: Net_UserAgent_Mobile

ライセンス

PHP licence

導入方法
  • 現在βのため、-fオプションをつけてpearコマンドでインストールする必要がある

            pear install -f Net_UserAgent_Mobile

  • サーバーに入っているpearのバージョンが 1.4.0 未満のためのエラーだと思われる。
  • 参考:http://pear.plus-server.net/faq.html 

 

 

 

 

 

 

 

 

 

mod_rewriteでの書き換え後のURLにQUERY〜STRINGを使用する

カテゴリー:Web


mod_rewriteでURLを書き換える際に、書き換え後のURLにQURY STRINGを入れる方法に苦労したので、その記録を書いておきます。

mod_rewriteでのURL書き換え例(QUERY STRINGを含まない場合)

まずはQUERY STRINGを使わない場合について説明します。

  • index.phpをindex.htmlでアクセスできるようにする。
RewriteEngine on
RewriteRule ^index.html$ index.php [L]
  • すべてのphpファイルを拡張子htmlでアクセスできるようにする。
RewriteEngine on
RewriteRule ^(.+).html$ $1.php [L]

書き換え前にQUERY STRINGを含む場合

次に書き換え前のアドレスにQUERY STRINGを含む場合

たとえば
http://www.hogehoge.com/hoge.php?name=yamada&pref=tokyo
というURLを
http://www.hogehoge.com/yamada/tokyo/hoge.php
と書き換える場合は以下のようにします。

RewriteEngine on
RewriteRule ^(.+)/(.+)/hoge.php$ index.php?name=$1&pref=$2

書き換え後にQUERY STRINGを含む場合

 たとえば
http://www.hogehoge.com/hoge.php?name=yamada&pref=tokyo&id=1111
というURLを
http://www.hogehoge.com/yamada/tokyo/hoge.php?id=1111
と書き換える場合は以下のようにします。

RewriteEngine on
RewriteCond %{QUERY_STRING} id=(.+)$
RewriteRule ^(.+)/(.+)/hoge.php$ hoge.php?name=$1&pref=$2&id=%1

追記

上のQUERY STRINGを含む場合の方法だと3行でやっていますが、以下のようにすると、もっとシンプルに行うことができることがわかりました。

RewriteEngine on
RewriteRule ^([^/]+)/([^/]+)/hoge.php$ hoge.php?name=$1&pref=$2&%{QUERY_STRING} [L]

参考にしたサイト 

Apache mod_rewrite モジュールの和訳

muumoo.jp:RewriteCond で QUERY_STRINGを使う具体的な例がありました。