mod_ktaiを使って携帯キャリア判別

暑い。暑すぎる。

さて、今日は携帯からのアクセスかどうかを判別する勉強。

最近、会社で時間がある時は先輩が書いたコードを眺めているのだが、いろいろ発見がある。

そのなかで、携帯からのアクセスかどうかで、携帯専用ページに飛ばすかどうかの判別をしているのだが、そのやり方を学んだ。

$_SERVERの環境変数を見て判別しているようだが、これがどうもよくわからない。


…略

rpmのインストール

こちらからrpmパッケージをインストール。インストール例ではドメイン名が違うのでインストールできず。せっかくなので最新版をインストールする。


wget http://labs.yumemi.co.jp/labs/mod/rpm/mod_ktai_info-0.9.0-1.el5.yumemi.i386.rpm
sudo rpm -ivh mod_ktai_info-0.10.0-1.el5.yumemi.i386.rpm

ktai_info.confができているのでそれの書き換え


sudo emacs etc/httpd/conf.d/ktai_info.conf
*ここで
  • LoadModule ktai_info_module modules/mod_ktai_info.so

  • KtaiInfoLoadDeviceConfigFile /etc/httpd/ktai/ktai_model.tsv

にかかっているコメントアウトをはずす

apacheの再起動


[ichikawa@ichikawa ~]$ sudo /etc/init.d/httpd restart
httpd を停止中: [ OK ]
httpd を起動中: [ OK ]

$_SERVERをvar_dumpしてみる


お、なんか環境変数が増えてる

ここで、docomo,au,softbankの場合は$_SERVER['X_KTAI_INFO_CARRIER_ID']が1〜3になるんですね。この画像はPCのfirefoxから見ているので、値は0。
その1〜3って数字は/etc/httpd/ktai/ktai_model.tsv
に記述されています。



CARRIER_ID DEVICE_ID WIDTH FLASH_TARGET
1 D209i 96 0
1 D2101V 120 0
1 D210i 96 0
1 D211i 100 0
1 D251i 132 0
1 D251iS 132 0
1 D252i 176 0
1 D253i 176 0
1 D253iWM 220 0
1 D501i 96 0
1 D502i 96 0
1 D503i 132 0


ということでsymfony的にはコントローラでどのように設定すれば良いかというと


index.php

$sf_app = "pc";

if(array_key_exists('X_KTAI_INFO_CARRIER_ID', $_SERVER) && 
   in_array((int)$_SERVER['X_KTAI_INFO_CARRIER_ID'], array(1,2,3))) {
$sf_app = "mobie";
}

define('SF_ROOT_DIR',    realpath(dirname(__FILE__).'/..'));
define('SF_APP',         $sf_app);
define('SF_ENVIRONMENT', 'prod');
define('SF_DEBUG',       false);

require_once(SF_ROOT_DIR.DIRECTORY_SEPARATOR.'apps'.DIRECTORY_SEPARATOR.SF_APP.DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'config.php');

sfContext::getInstance()->getController()->dispatch();

こんな感じでしょうか。
apache環境変数を追加するということをいままでしたことがなかったので新鮮でした。
なんでもできちゃうんですね。


メモ書きなので説明足らずですみません。