はじめに
最近は、ガラケー向けサイトを構築することもなくなりました。
ガラケー向けサイトを作ったことがない人も増えてきていると思います。
今回は、ガラケー向けサイトを作る上で、利用したテクニックを紹介します。
サンプルコードは、すべてPHPです。
2013年ごろの情報をもとに記述しています。現在と仕様が異なる場合があります。
ユーザーエージェント
ユーザーエージェントからキャリアを判定します。
はじめに、ユーザーエージェントを取得する方法です。
$agent = (isset($_SERVER['HTTP_USER_AGENT']) && !empty($_SERVER['HTTP_USER_AGENT'])) ? $_SERVER['HTTP_USER_AGENT'] : '';
ドコモのとき、trueを返します。
ereg("^DoCoMo", $agent) == 1;
auのとき、trueを返します。
ereg("^UP.Browser|^KDDI", $agent) == 1;
ソフトバンクのとき、trueを返します。J-PHONEやVodafoneもソフトバンクとします。
ereg("^J-PHONE|^Vodafone|^SoftBank", $agent) == 1;
Willcomのとき、trueを返します。
strpos($agent, 'WILLCOM') || strpos($agent, 'SHARP/WS') || strpos($agent, 'DDIPOCKET') == 1;
Cookieサポート判定
iモードブラウザ1.0、iモードブラウザ2.0の一部端末では、Cookieが利用できません。
一度、Cookieに値を書き込んで、その値が読み取れるかでCookieが利用できるか判定します。
// cookieが使えるか判定するために1を入れておく
@setcookie('cookie', '1', 0, '/');
(preg_match('/^DoCoMo\/1.0/', $agent) || preg_match('/^DoCoMo\/2.0[^(]+\(c100;/', $agent) || @$_COOKIE['cookie'] != 1);
Cookieが利用できない場合、セッションIDを付与したURLを作成する必要があります。
$url = $url.(strpos($url, '?') == false) ? '?' : '&'.session_name().'='.session_id();
IPアドレス
IPアドレスからキャリアを判定します。
OpenPNEの携帯電話IPアドレス帯域リストからymlファイルを入手します。
例えば、ドコモのIPアドレス帯域は、以下のとおりです。
docomo:
- 124.146.174.0/24
- 124.146.175.0/24
- 202.229.176.0/24
- 202.229.177.0/24
- 202.229.178.0/24
- 210.136.161.0/24
- 210.153.84.0/24
- 210.153.86.0/24
IPアドレスを取得します。
$ip = $_SERVER['REMOTE_ADDR'];
/* HTTP_X_FORWARDED_FORがある場合は上書きする */
if(isset($_SERVER['HTTP_X_FORWARDED_FOR']) && !empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
ymlファイルを読み込みます。yaml拡張モジュールが必要です。
$table = yaml_parse_file(dirname(__FILE__).DIRECTORY_SEPARATOR.'mobile_ip_address.yml');
このIPアドレス帯域リストにIPアドレスが含まれているか確認します。
$carrier = 0;
foreach($table as $c => $caddrs){
foreach($caddrs as $check_addr){
list($p_ip, $mask) = explode("/", $check_addr);
$ip_long = ip2long($p_ip) >> (32 - $mask);
$p_ip_long = ip2long($ip) >> (32 - $mask);
if($ip_long == $p_ip_long) {
$carrier = $c;
break;
}
}
}