LoginSignup
3
1

More than 5 years have passed since last update.

ガラケープログラミング

Last updated at Posted at 2017-12-23

はじめに

最近は、ガラケー向けサイトを構築することもなくなりました。
ガラケー向けサイトを作ったことがない人も増えてきていると思います。

今回は、ガラケー向けサイトを作る上で、利用したテクニックを紹介します。

サンプルコードは、すべて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;
        }
    }
}
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1