- 2009/07/15 18:33
- PHP

今会社で携帯サイトを作っているのですが、その際、携帯の機種毎に振り分ける必要が出てきて、その処理をPHPで作ったのでメモ。
というか、機種名を表示するまでの部分ですが(^^;)
最初に、PHPの、
$_SERVER['HTTP_USER_AGENT'];
で、携帯のUser-Agentが取得できるわけですが、
その文字列によって条件分けします。
ただし、auは機種名ではなく、デバイスIDという特殊な文字列が出てくるので、それを機種名に変更する必要があります。
auに関しては、適宜、デバイスIDを機種名に変換してください。
以下が参考になります。
では、機種判別のスクリプトです。
//User-Agentを取得
$agent = $_SERVER['HTTP_USER_AGENT'];
if(ereg("^DoCoMo", $agent)){
//DoCoMoの場合
if (strpos($agent, "/1.0") > 0 && strpos($agent, "/", 11) >= 0){
$device = substr($agent, 11, (strpos($agent, "/", 11) - 11));
} else if (strpos($agent, "/2.0") > 0 && strpos($agent, "(") >= 0){
$device = substr($agent, 11, strpos($agent, "(" ) - 11);
} else {
$device = substr($agent, 11);
}
echo $device;
exit;
} else if (ereg("^J-PHONE|^Vodafone|^SoftBank", $agent)){
//Softbankの場合
$device = $_SERVER{'HTTP_X_JPHONE_MSNAME'};
echo $device;
exit;
} else if (ereg("^UP.Browser|^KDDI", $agent)){
//auの場合
$device = substr($agent, (strpos($agent, "-") + 1), (strpos($agent, " ") - strpos($agent, "-") - 1));
//デバイスIDから機種名に変換
if (array_key_exists(trim($device),$au-devices)){
echo $au_devices[$device];
exit;
} else {
echo "other au model";
exit;
}
}
ちなみに、auのデバイス名は以下のような配列を読み込んで使ってます。
<?php /* * auのデバイスIDと機種名の対応表 * http://www.au.kddi.com/ezfactory/tec/spec/4_4.html */ // 2009/07/03現在 $au_devices = array( "HI3G" => "Mobile Hi-Vision CAM Wooo" ,"KC3Q" => "misora[iida]" ,"TS3O" => "biblio" ,"TS3P" => "T002" ,"SH3B" => "SH002" ,"KC3O" => "K002" ,"SH3C" => "Sportio water beat" ,"CA3E" => "CA002" ,"SN3K" => "G9[iida]" ,"SN3J" => "S001" ,"PT35" => "NS02" ,"MA35" => "P001" ,"TS3N" => "T001" ,"HI3F" => "H001" ,"SH38" => "SH001" ,"CA3D" => "CA001" ,"SN3I" => "Premier3" ,"KC3N" => "NS01" ,"KC3M" => "K001" ,"SN3H" => "Xmini" ,"HI3E" => "W63H" ,"TS3M" => "W65T" ,"CA3C" => "W63CA" ,"SH37" => "W64SH" ,"KC3I" => "W65K" ,"SN3G" => "W64S" ,"MA34" => "W62P" ,"TS3L" => "W64T" ,"KC3K" => "W63Kカメラ無し" ,"SH36" => "URBANO" ,"PT34" => "W62PT" ,"SA3E" => "W64SA" ,"CA3B" => "W62CA" ,"HI3D" => "W62H" ,"SH35" => "W62SH" ,"SN3F" => "re" ,"KC3H" => "W63K" ,"TS3K" => "Sportio" ,"TS3J" => "W62T" ,"SA3D" => "W63SA" ,"KC3G" => "W62K" ,"SN3D" => "W61S" ,"SA3C" => "W61SA" ,"SN3E" => "W62S" ,"TS3I" => "W61T" ,"HI3C" => "W61H" ,"ST34" => "W62SA" ,"PT33" => "W61PT" ,"MA33" => "W61P" ,"CA3A" => "W61CA" ,"KC3D" => "W61K" ,"SA3B" => "W54SA" ,"SH34" => "W61SH" ,"SN3C" => "W54S" ,"TS3H" => "W56T" ,"TS3G" => "W55T" ,"HI3B" => "W53H" ,"KC3B" => "W53K/W64K" ,"ST33" => "INFOBAR 2" ,"KC3E" => "W44K IIカメラなしモデル" ,"SN3B" => "W53S" ,"CA39" => "W53CA" ,"ST32" => "W53SA" ,"TS3E" => "W54T" ,"SH33" => "W52SH" ,"CA38" => "W52CA" ,"MA32" => "W52P" ,"SN3A" => "W52S" ,"TS3D" => "W53T" ,"SA3A" => "W52SA" ,"HI3A" => "W52H" ,"KC3A" => "MEDIA SKIN" ,"SH32" => "W51SH" ,"SN39" => "W51S" ,"TS3C" => "W52T" ,"TS3B" => "W51T" ,"SA39" => "W51SA" ,"HI39" => "W51H" ,"CA37" => "W51CA" ,"MA31" => "W51P" ,"KC39" => "W51K" ,"TS39" => "DRAPE" ,"TS3A" => "W47T" ,"SN38" => "W44S" ,"KC38" => "W44K/K II" ,"SA38" => "W43SA" ,"TS38" => "W45T" ,"CA35" => "W43CA" ,"HI38" => "W43H/H II" ,"SN37" => "W43S" ,"KC37" => "W43K" ,"ST31" => "W42SA" ,"SH31" => "W41SH" ,"CA34" => "W42CA" ,"HI37" => "W42H" ,"TS37" => "W44T/T II/T III" ,"TS35" => "neon" ,"TS36" => "W43T" ,"SN36" => "W42S" ,"KC36" => "W42K" ,"KC35" => "W41K" ,"SA36" => "W41SA" ,"TS34" => "W41T" ,"HI36" => "W41H" ,"CA33" => "W41CA" ,"SN34" => "W41S" ,"HI34" => "PENCK" ,"SA35" => "W33SA/SA II" ,"TS33" => "W32T" ,"SA34" => "W32SA" ,"KC34" => "W32K" ,"HI35" => "W32H" ,"SN33/SN35" => "W32S" ,"CA32" => "W31CA" ,"TS32" => "W31T" ,"SN32" => "W31S" ,"KC33" => "W31K/K II" ,"SA33" => "W31SA/SA II" ,"SA32" => "W22SA" ,"HI33" => "W22H" ,"CA31" => "W21CA/CA II" ,"TS31" => "W21T" ,"SA31" => "W21SA" ,"SN31" => "W21S" ,"KC32" => "W21K" ,"HI32" => "W21H" ,"KC31" => "W11K" ,"HI31" => "W11H" ,"SH39" => "E05SH" ,"CA36" => "E03CA" ,"SA37" => "E02SA" ,"ST2C" => "Sweets cute" ,"ST29" => "Sweets pure" ,"CA28" => "G'zOne TYPE-R" ,"ST26" => "Sweets" ,"ST25" => "talby" ,"ST22" => "INFOBAR" ,"TS2E" => "A5529T" ,"KC2A" => "A5528K" ,"SA2A" => "A5527SA" ,"KC29" => "A5526K" ,"ST2D" => "A5525SA" ,"TS2D" => "A5523T" ,"SA29" => "A5522SA" ,"KC28" => "A5521K" ,"ST2A" => "A5520SA/SA II" ,"ST28" => "A5518SA" ,"TS2C" => "A5517T" ,"TS2B" => "A5516T" ,"KC27" => "A5515K" ,"ST27" => "A5514SA" ,"CA27" => "A5512CA" ,"TS2A" => "A5511T" ,"TS29" => "A5509T" ,"ST24" => "A5507SA" ,"TS28" => "A5506T" ,"SA27" => "A5505SA" ,"TS27" => "A5504T" ,"SA26" => "A5503SA" ,"KC24/KC25" => "A5502K" ,"TS26" => "A5501T" ,"CA26" => "A5407CA" ,"CA25" => "A5406CA" ,"ST23" => "A5405SA" ,"SN25" => "A5404S" ,"CA24" => "A5403CA" ,"SN24" => "A5402S" ,"CA23" => "A5401CA II" ,"CA23" => "A5401CA" ,"ST21" => "A5306ST" ,"KC22" => "A5305K" ,"TS24" => "A5304T" ,"HI24" => "A5303H II" ,"HI23" => "A5303H" ,"CA22" => "A5302CA" ,"TS23" => "A5301T" ,"SA22" => "A3015SA" ,"PT23" => "A1407PT" ,"PT22" => "A1406PT" ,"PT21" => "A1405PT" ,"SN29" => "A1404S/S II" ,"KC26" => "A1403K" ,"SN27" => "A1402S II" ,"SN28" => "A1402S IIカメラ無し" ,"SN26" => "A1402S" ,"KC23" => "A1401K" ,"SA28" => "A1305SA" ,"TS25" => "A1304T II" ,"TS25" => "A1304T" ,"TS25" => "A1304Tカメラ無し" ,"SA25" => "A1303SA" ,"SA24" => "A1302SA" ,"SN23" => "A1301S" ,"KC26" => "B01K" ,"SN21" => "A3014S" ,"TS22" => "A3013T" ,"CA21" => "A3012CA" ,"SA21" => "A3011SA" ,"SN22" => "A1101S" ,"TS21" => "C5001T" ,"MA21" => "C3003P" ,"KC21" => "C3002K" ,"HI21" => "C3001H" ); ?>
参考URL
PHPで携帯の機種名取得|Webで使えるテクニック!Webで困ったときのメモ帳
関連記事
- 携帯版Google Adsenseのコードがいつのまにか変更になっている
- Eclipseプラグイン「JStyle」
- Movable Type で LPOを考えてみる(その1)
- 最近のDoCoMo携帯のUser-Agentについて
- [PHP] iPadの検出とUser-Agent
- クールなグラフを作成できる「Open Flash Chart」のキャッシュ問題
- mod_rewriteの「%2F」問題の解決法
- PHPで更新Pingの送信
Sponsored Link
Google+
zenback
- Newer: Eclipseプラグイン「JStyle」
- Older: WordPress 2.8.1にアップグレード完了
Comments:0
Trackbacks:2
- Trackback URL for this entry
- http://www.multiburst.net/sometime-php/2009/07/selecting-moble-device-on-php/trackback/
- Listed below are links to weblogs that reference
- 携帯の機種名を抽出するPHP from Sometime PHP
- pingback - ITキヲスク | 2009年7/12~7/18の週間ブックマーク より 2009/07/19
[...] 各携帯キャリアの機種名を抽出するプログラム [...]
- trackback - muneto.murakami.biz Weblog より 2009/10/22
【携帯サイト制作】第二十二回auのデバイスIDを端末名に変換する。
例えば以下のようにphpでauのユーザエージェントを取得します。
$uid = $_SERVER [ 'HTTP_X_UP_SUBNO' ];
$uidには以下のような文字列が入ると思います。(W53Tの場合)
KDDI-TS3D UP.Browser/6.2.0.13.1.5 (GUI) MMP/2….
Additional comments powered by BackType





