携帯の機種ごとのディスプレイサイズをUserAgentから取得
カテゴリー:Web
携帯電話の画面サイズを取得する処理を作る必要がでたので、3つのライブラリを試してみました。
その結果をまとめておきたいと思います。
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を設置して呼び出すだけで使用可能。
ライセンス
表記がなかったため問い合わせたところ「商用でも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]
参考にしたサイト
muumoo.jp:RewriteCond で QUERY_STRINGを使う具体的な例がありました。