Help us understand the problem. What is going on with this article?

ガラケープログラミング

More than 1 year has passed since last update.

はじめに

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

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

サンプルコードは、すべて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;
        }
    }
}
arthur87
iwate-pu
岩手県滝沢市にある公立大学です。Qiitaではソフトウェア情報学部生や出身の人が多いです。
https://www.iwate-pu.ac.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした