[PHP] 携帯(モバイル)サイト作成用の関数
<?php
//--------------------------------------------------------------------------
// 設定
//--------------------------------------------------------------------------
mb_internal_encoding('UTF-8');
mb_language('ja');
// 開発者のグローバルIPアドレス
define('DEV_IP_ADDRESS', '***.***.***.***');
// サイトURL
define('SITE_URL', 'http://example.com');
// Google Analytics の モバイル用アカウント
define('GA_ACCOUNT', 'MO-*******-**');
// Google Analytics の ga.php のパス
define('GA_PIXEL', '/ga.php');
define('MOBILE_CARRIER_UNKNOWN', 0);
define('MOBILE_CARRIER_DOCOMO', 1);
define('MOBILE_CARRIER_EZWEB', 2);
define('MOBILE_CARRIER_SOFTBANK', 3);
define('MOBILE_CARRIER_EMOBILE', 4);
define('MOBILE_CARRIER_IPHONE', 5);
define('MOBILE_CARRIER_PHS', 6);
//--------------------------------------------------------------------------
//携帯キャリアの判別
//--------------------------------------------------------------------------
function getMobileCarrier($user_agent = null) {
$carrier = null;
if ($user_agent === null) {
$user_agent = $_SERVER['HTTP_USER_AGENT'];
}
if (strpos($user_agent, 'DoCoMo') !== false) {
$carrier = MOBILE_CARRIER_DOCOMO;
} elseif (preg_match('/KDDI|UP.Browser/', $user_agent)) {
$carrier = MOBILE_CARRIER_EZWEB;
} elseif (preg_match('/SoftBank|Vodafone|J-PHONE|MOT-C980|MOT-V980/', $user_agent)) {
$carrier = MOBILE_CARRIER_SOFTBANK;
} elseif (strpos($user_agent, 'emobile') !== false) {
$carrier = MOBILE_CARRIER_EMOBILE;
} elseif (strpos($user_agent, 'iPhone') !== false) {
$carrier = MOBILE_CARRIER_IPHONE;
} elseif (preg_match('/WILLCOM|DDIPOCKET/', $user_agent)) {
$carrier = MOBILE_CARRIER_PHS;
}
return $carrier;
}
//--------------------------------------------------------------------------
// 機種固有番号の取得
//--------------------------------------------------------------------------
function getMobileUid($carrier = null){
if ($carrier === null) {
$carrier = getMobileCarrier();
}
$uid = null;
if ($carrier == MOBILE_CARRIER_DOCOMO && isset($_SERVER["HTTP_X_DCMGUID"])) {
$uid = $_SERVER['HTTP_X_DCMGUID'];
} elseif ($carrier == MOBILE_CARRIER_EZWEB && isset($_SERVER['HTTP_X_UP_SUBNO'])) {
$uid = $_SERVER['HTTP_X_UP_SUBNO'];
} elseif ($carrier == MOBILE_CARRIER_SOFTBANK && isset($_SERVER['HTTP_X_JPHONE_UID'])) {
$uid = $_SERVER['HTTP_X_JPHONE_UID'];
} elseif ($carrier == MOBILE_CARRIER_SOFTBANK && preg_match("/SN[a-zA-Z0-9]+/", $_SERVER['HTTP_USER_AGENT'], $match)) {
$uid = $match[0];
} elseif ($carrier == MOBILE_CARRIER_EMOBILE && isset($_SERVER['HTTP_X_EM_UID'])) {
$uid = $_SERVER['HTTP_X_EM_UID'];
} elseif($_SERVER["REMOTE_ADDR"] === DEV_IP_ADDRESS){
$uid = 'dev_dummy_uid';
}
return $uid;
};
//--------------------------------------------------------------------------
// 携帯キャリア毎のIPアドレス
//--------------------------------------------------------------------------
function getMobileIpAddresses($key = null) {
$arr = array(
#docomo 2010/05/14
MOBILE_CARRIER_DOCOMO => array(
'210.153.84.0/24',
'210.136.161.0/24',
'210.153.86.0/24',
'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.153.87.0/24',
'203.138.180.0/24',
'203.138.181.0/24',
'203.138.203.0/24',
),
#ezweb 2010/05/14
MOBILE_CARRIER_EZWEB => array(
'210.230.128.224/28',
'121.111.227.160/27',
'61.117.1.0/28',
'219.108.158.0/27',
'219.125.146.0/28',
'61.117.2.32/29',
'61.117.2.40/29',
'219.108.158.40/29',
'219.125.148.0/25',
'222.5.63.0/25',
'222.5.63.128/25',
'222.5.62.128/25',
'59.135.38.128/25',
'219.108.157.0/25',
'219.125.145.0/25',
'121.111.231.0/25',
'121.111.227.0/25',
'118.152.214.192/26',
'118.159.131.0/25',
'118.159.133.0/25',
'118.159.132.160/27',
'111.86.142.0/26',
'111.86.141.64/26',
'111.86.141.128/26',
'111.86.141.192/26',
'118.159.133.192/26',
),
#softbank 2010/05/14
MOBILE_CARRIER_SOFTBANK => array(
'123.108.237.0/27',
'202.253.96.224/27',
'210.146.7.192/26',
'210.175.1.128/25',
'123.108.237.224/27',
'202.253.96.0/28',
),
#emobile 2010/05/14
MOBILE_CARRIER_EMOBILE => array(
'117.55.1.224/27',
'117.55.1.128/26',
'117.55.1.96/27',
'117.55.65.0/28',
),
#willcom 2010/05/13
MOBILE_CARRIER_PHS => array(
'61.198.128.0/24',
'61.198.129.0/24',
'61.198.130.0/24',
'61.198.131.0/24',
'61.198.132.0/24',
'61.198.133.0/24',
'61.198.134.0/24',
'61.198.135.0/24',
'61.198.136.0/24',
'61.198.137.0/24',
'61.198.138.100/32',
'61.198.138.101/32',
'61.198.138.102/32',
'61.198.138.103/32',
'61.198.139.0/29',
'61.198.139.128/27',
'61.198.139.160/28',
'61.198.140.0/24',
'61.198.141.0/24',
'61.198.142.0/24',
'61.198.143.0/24',
'61.198.160.0/24',
'61.198.161.0/24',
'61.198.162.0/24',
'61.198.163.0/24',
'61.198.164.0/24',
'61.198.165.0/24',
'61.198.166.0/24',
'61.198.168.0/24',
'61.198.169.0/24',
'61.198.170.0/24',
'61.198.171.0/24',
'61.198.172.0/24',
'61.198.173.0/24',
'61.198.174.0/24',
'61.198.175.0/24',
'61.198.248.0/24',
'61.198.249.0/24',
'61.198.250.0/24',
'61.198.251.0/24',
'61.198.252.0/24',
'61.198.253.0/24',
'61.198.254.0/24',
'61.198.255.0/24',
'61.204.0.0/24',
'61.204.2.0/24',
'61.204.3.0/25',
'61.204.3.128/25',
'61.204.4.0/24',
'61.204.5.0/24',
'61.204.6.0/25',
'61.204.6.128/25',
'61.204.7.0/25',
'61.204.92.0/24',
'61.204.93.0/24',
'61.204.94.0/24',
'61.204.95.0/24',
'114.20.49.0/24',
'114.20.50.0/24',
'114.20.51.0/24',
'114.20.52.0/24',
'114.20.53.0/24',
'114.20.54.0/24',
'114.20.55.0/24',
'114.20.56.0/24',
'114.20.57.0/24',
'114.20.58.0/24',
'114.20.59.0/24',
'114.20.60.0/24',
'114.20.61.0/24',
'114.20.62.0/24',
'114.20.63.0/24',
'114.20.64.0/24',
'114.20.65.0/24',
'114.20.66.0/24',
'114.20.67.0/24',
'114.21.255.0/27',
'125.28.0.0/24',
'125.28.1.0/24',
'125.28.15.0/24',
'125.28.16.0/24',
'125.28.17.0/24',
'125.28.2.0/24',
'125.28.3.0/24',
'125.28.4.0/24',
'125.28.5.0/24',
'125.28.8.0/24',
'210.168.246.0/24',
'210.168.247.0/24',
'210.169.92.0/24',
'210.169.93.0/24',
'210.169.94.0/24',
'210.169.95.0/24',
'210.169.96.0/24',
'210.169.97.0/24',
'210.169.98.0/24',
'210.169.99.0/24',
'211.126.192.128/25',
'211.18.232.0/24',
'211.18.233.0/24',
'211.18.234.0/24',
'211.18.235.0/24',
'211.18.236.0/24',
'211.18.237.0/24',
'219.108.10.0/24',
'219.108.11.0/24',
'219.108.12.0/24',
'219.108.13.0/24',
'219.108.14.0/24',
'219.108.15.0/24',
'219.108.7.0/24',
'219.108.8.0/24',
'219.108.9.0/24',
'221.119.0.0/24',
'221.119.1.0/24',
'221.119.2.0/24',
'221.119.3.0/24',
'221.119.4.0/24',
'221.119.6.0/24',
'221.119.7.0/24',
'221.119.8.0/24',
'221.119.9.0/24',
'219.108.2.0/24',
'219.108.3.0/24',
'125.28.6.0/24',
'125.28.7.0/24',
'125.28.11.0/24',
'125.28.12.0/24',
'125.28.13.0/24',
'125.28.14.0/24',
'211.18.238.0/24',
'211.18.239.0/24',
'219.108.4.0/24',
'219.108.5.0/24',
'219.108.6.0/24',
'221.119.5.0/24',
'124.211.23.0/26',
),
#Google 2010/05/14
GOOGLE_IP => array(
'72.14.199.0/25',
'209.85.238.0/25',
),
#Yahoo 2010/05/14
YAHOO_IP => array(
'124.83.159.146',
'124.83.159.147',
'124.83.159.148',
'124.83.159.149',
'124.83.159.150',
'124.83.159.151',
'124.83.159.152',
'124.83.159.153',
'124.83.159.154',
'124.83.159.155',
'124.83.159.156',
'124.83.159.157',
'124.83.159.158',
'124.83.159.159',
'124.83.159.160',
'124.83.159.161',
'124.83.159.162',
'124.83.159.163',
'124.83.159.164',
'124.83.159.165',
'124.83.159.166',
'124.83.159.167',
'124.83.159.168',
'124.83.159.169',
'124.83.159.170',
'124.83.159.171',
'124.83.159.172',
'124.83.159.173',
'124.83.159.174',
'124.83.159.175',
'124.83.159.176',
'124.83.159.177',
'124.83.159.178',
'124.83.159.179',
'124.83.159.180',
'124.83.159.181',
'124.83.159.182',
'124.83.159.183',
'124.83.159.184',
'124.83.159.185',
'124.83.159.224',
'124.83.159.225',
'124.83.159.226',
'124.83.159.227',
'124.83.159.228',
'124.83.159.229',
'124.83.159.230',
'124.83.159.231',
'124.83.159.232',
'124.83.159.233',
'124.83.159.234',
'124.83.159.235',
'124.83.159.236',
'124.83.159.237',
'124.83.159.238',
'124.83.159.239',
'124.83.159.240',
'124.83.159.241',
'124.83.159.242',
'124.83.159.243',
'124.83.159.244',
'124.83.159.245',
'124.83.159.246',
'124.83.159.247',
),
#livedoor 2010/05/14
LIVEDOOR_IP => array(
'203.104.254.0/24',
),
#goo 2010/05/14
GOO_IP => array(
'210.150.10.32/27',
'203.131.253.0/24',
'203.131.250.0/24',
'203.131.251.0/24',
'203.131.252.0/24',
'203.131.254.0/24',
'203.131.255.0/24',
),
#froute 2010/05/14
FROUTE_IP => array(
'60.43.36.253',
),
#DeNA 2010/05/14
DENA => array(
'202.238.103.126',
'202.213.221.97',
),
);
return isset($arr[$key]) ? $arr[$key] : $arr;
}
//--------------------------------------------------------------------------
// 携帯IPアドレスの判定
//--------------------------------------------------------------------------
function validMobileIpAddresses($carrier = null) {
if ($carrier === null) {
$carrier = getMobileCarrier();
}
//PEAR Net_IPv4の読み込み
require_once("Net/IPv4.php");
$flg = false;
$carrier_ip_addresses = getMobileIpAddresses($carrier);
if (!empty($carrier_ip_addresses)) {
foreach ($carrier_ip_addresses as $val) {
if (Net_IPv4::ipInNetwork($_SERVER["REMOTE_ADDR"], $val) === true || $_SERVER['REMOTE_ADDR'] === $val) {
$flg = true;
}
}
}
return $flg;
}
//--------------------------------------------------------------------------
// Google Analytics
//--------------------------------------------------------------------------
function googleAnalyticsGetImageUrl() {
global GA_ACCOUNT, GA_PIXEL;
$url = SITE_URL;
$url .= GA_PIXEL . "?";
$url .= "utmac=" . GA_ACCOUNT;
$url .= "&utmn=" . rand(0, 0x7fffffff);
$referer = $_SERVER["HTTP_REFERER"];
$query = $_SERVER["QUERY_STRING"];
$path = $_SERVER["REQUEST_URI"];
if (empty($referer)) {
$referer = "-";
}
$url .= "&utmr=" . urlencode($referer);
if (!empty($path)) {
$url .= "&utmp=" . urlencode($path);
}
$url .= "&guid=ON";
return str_replace("&", "&", $url);
}
//---------------------------------------------------------------------------
// 各携帯キャリアの入力モード
//---------------------------------------------------------------------------
function getMobileInputMode ($key = null) {
switch (getMobileCarrier()) {
case 'docomo':
$arr[0] = "istyle";
$arr[1] = 1;//ひらがな/漢字
$arr[2] = 2;//カタカナ
$arr[3] = 3;//アルファベット
$arr[4] = 4;//数字
break;
case 'au':
$arr[0] = "format";
$arr[1] = "*M";
$arr[2] = "*M";
$arr[3] = "*m";
$arr[4] = "*N";
break;
case 'softbank':
$arr[0] = "mode";
$arr[1] = "hiragana";
$arr[2] = "katakana";
$arr[3] = "alphabet";
$arr[4] = "numeric";
break;
default:
$arr[0] = "istyle";
$arr[1] = 1;
$arr[2] = 2;
$arr[3] = 3;
$arr[4] = 4;
break;
}
return isset($arr[$key]) ? $arr[$key] : $arr;
}
//---------------------------------------------------------------------------
// 携帯メールアドレス
//---------------------------------------------------------------------------
function getMobileEmails($key = null) {
$arr = array(
1 => '@docomo.ne.jp',//Docomo
2 => '@ezweb.ne.jp',//EZWEB
3 => '@softbank.ne.jp',//SoftBank
4 => '@disney.ne.jp',
5 => '@d.vodafone.ne.jp',
6 => '@h.vodafone.ne.jp',
7 => '@t.vodafone.ne.jp',
8 => '@c.vodafone.ne.jp',
9 => '@k.vodafone.ne.jp',
10 => '@r.vodafone.ne.jp',
11 => '@s.vodafone.ne.jp',
12 => '@n.vodafone.ne.jp',
13 => '@q.vodafone.ne.jp',
14 => '@jp-d.ne.jp',
15 => '@jp-h.ne.jp',
16 => '@jp-t.ne.jp',
17 => '@jp-c.ne.jp',
18 => '@jp-k.ne.jp',
19 => '@jp-r.ne.jp',
20 => '@jp-s.ne.jp',
21 => '@jp-n.ne.jp',
22 => '@jp-q.ne.jp',
23 => '@i.softbank.jp',//iPhone
24 => '@pdx.ne.jp',
25 => '@emnet.ne.jp',//EMOBILE
26 => '@willcom.com',//WILLCOM
);
return isset($arr[$key]) ? $arr[$key] : $arr;
}
//---------------------------------------------------------------------------
// 携帯メールアドレスか否かの判定
//---------------------------------------------------------------------------
function isMobileEmail() {
$flg = false;
foreach ($arr as $key => $val) {
if (stripos($email, $val) !== false) {
$flg = true;
break;
}
}
return $flg;
}
?>
DoCoMo用の処理の例
// ヘッダーの送信 と guidの付与
$guid = '';
if (getMobileCarrier() === MOBILE_CARRIER_DOCOMO) {
header('Content-Type:application/xhtml+xml'."\n");
$guid = '?guid=ON';
}
// URLにセッションを付与する例
//「Docomo の User Agent」 + 「Docomo の uid」 + 「Docomo の IPアドレス」のすべてに一致した場合のみ使用
$sess_id = '';
if (getMobileCarrier() === MOBILE_CARRIER_DOCOMO &&
getMobileUid() == $_SERVER['HTTP_X_DCMGUID'] &&
validMobileIpAddresses(MOBILE_CARRIER_DOCOMO)
{
ini_set('session.use_cookies', 0);
session_start();
$sess_id = session_name().'='.session_id();
$sess_id = htmlspecialchars($sess_id);
}
こちらもあわせてどうぞ
機種固有番号の取得のfunctionの中の
$carrer 変数が間違いましたみたいですね!
>php fun さん
スペルミスでしたね。
ご指摘ありがとうございました。