PHPでPCとケータイを識別する

(1/1)
PHP でユーザー・アクセス情報を表示する」で解説したサーバ変数 HTTP_USER_AGENT を使えば、アクセスしてきているのが携帯電話かどうかを識別することができる。
そこで今回は、アクセスしてきているのが PC か携帯電話なのかを判別し、表示するコンテンツを自動変更するプログラムを作ってみることにする。

サンプル・プログラム

サンプル・プログラムの解説:携帯電話の識別

プログラムは簡単で、ユーザー関数 isKeitai で携帯電話かどうかを判断している。

ただし、HTTP_USER_AGENT の値は携帯電話キャリアによって異なる。また、発売時期によっても異なる。
さらに、PC のブラウザによっては HTTP_USER_AGENT の値を偽装できる(例:Sleipnir)。
したがって、isKeitai の結果は絶対的とは言い切れない。あくまで目安としてご利用いただきたい。

0011: /**
0012:  * アクセスしてきているのがケータイかどうか調べる
0013:  * 現在判明している HTTP_USER_AGENT の値です
0014:  * @return bool TRUE:ケータイである/FALSE:ケータイでない
0015: */
0016: function isKeitai() {
0017:     //NTT DoCoMo
0018:     if (preg_match("/DoCoMo/", $_SERVER['HTTP_USER_AGENT']))        return TRUE;
0019:     //旧J-PHONE~vodafoneの2G
0020:     if (preg_match("/J-PHONE/", $_SERVER['HTTP_USER_AGENT']))        return TRUE;
0021:     //vodafoneの3G
0022:     if (preg_match("/Vodafone/", $_SERVER['HTTP_USER_AGENT']))        return TRUE;
0023:     //vodafoneの702MOシリーズ
0024:     if (preg_match("/MOT/", $_SERVER['HTTP_USER_AGENT']))            return TRUE;
0025:     //SoftBankの3G
0026:     if (preg_match("/SoftBank/", $_SERVER['HTTP_USER_AGENT']))        return TRUE;
0027:     //au (KDDI)
0028:     if (preg_match("/PDXGW/", $_SERVER['HTTP_USER_AGENT']))            return TRUE;
0029:     if (preg_match("/UP\.Browser/", $_SERVER['HTTP_USER_AGENT']))  return TRUE;
0030:     //ASTEL
0031:     if (preg_match("/ASTEL/", $_SERVER['HTTP_USER_AGENT']))            return TRUE;
0032:     //DDI Pocket
0033:     if (preg_match("/DDIPOCKET/", $_SERVER['HTTP_USER_AGENT']))        return TRUE;
0034: 
0035:     return FALSE;
0036: }

サンプル・プログラムの解説:表示コンテンツの切り換え

isKeitai関数の戻り値によって、表示コンテンツ $msg を切り換える。

念のため、HTTP_USER_AGENT の生の値([$_SERVER'HTTP_USER_AGENT'])を画面に表示するようにしてある。

0039: if (isKeitai()) {
0040:     $msg = 'あなたは携帯電話からアクセスしています。';
0041: else {
0042:     $msg = 'あなたは携帯電話以外からアクセスしています。';
0043: }

参考サイト

(この項おわり)
header