1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
<?php
/* ---------------------------------------------------------------------------------
 *    USER AGENTによるブラウザ、バージョンの判別:「PC + スマートフォン + 携帯電話」
 *  2015.09.24 作成 yoshi of CXMedia Inc.
 * --------------------------------------------------------------------------------- */
header("Content-type:text/html; charset=UTF-8");

// 環境変数のユーザーエージェントからブラウザの種類を得る。
$ua_str $_SERVER["HTTP_USER_AGENT"];
// テストデータ利用のとき、ブラウザの種類を引数にして、コメントを外す
//$ua_str = useragent_data_set('Android');

list($dev_type,$device,$brawser) = UserAgentGet($ua_str);

echo 
'■User_agent:<pre>',$ua_str,'</pre><br>';

// パソコンの端末の時
if($dev_type == 'PC'){
    echo 
'■パソコンブラウザ:',$device,'■Version:',$brawser;
}
// スマートフォンの時
elseif($dev_type == 'smapho'){
    echo 
'■スマートフォン:',$device,'■OS Version:',$brawser;
}
// 携帯電話の時
elseif($dev_type == 'cellular'){
    echo 
'■携帯電話のキャリア:',$device,'■機種名:',$brawser;
}
// その他の時
else {
    echo 
'■その他端末:',$device,'■Version:',$brawser;
}

/* ----------------------------------------------------
 *   USER_AGENTの端末種類、ブラウザ、キャリア判断関数
 * ---------------------------------------------------- */
function UserAgentGet($ua_str){
// USER_AGENTの判定テーブル[regパターン,splitのregパターン,分割index]
    
$ua_reg_tbl = array(
        
// スマートフォン(パソコンと同じブラウザがあるため、パソコンより前に設置すること)
        
'iphone'    => array('smapho','(iPhone);\s\bcpu\siPhone\sOS\s(.*?[^ ])\s'),
        
'ipod'      => array('smapho','(iPod);\s\bcpu\siPhone\sOS\s(.*?[^ ])\s'),
        
'ipad'      => array('smapho','(iPad);\s\bcpu\sOS\s(.*?[^ ])\s'),
        
'android'   => array('smapho','(Android)\s+(.*?[^;])\;'),
        
'win-phone' => array('smapho','(Windows Phone)\s+\bOS*\s+(.*?[^;|)])(?:\;|\))'),
        
'blackberry'=> array('smapho','(BlackBerry[^;])\s?(.*?[^;])(?:\;|\s)'),
        
// 携帯電話
        
'DoCoMo_'   => array('cellular','^DoCoMo','[/(\s;]',2),
        
'AU_'       => array('cellular','^KDDI-','[/-\s]',1),
        
'AU_T'      => array('cellular','^UP\.Browser','[/-\s]',2),
        
'Softbank_J'=> array('cellular','^J-PHONE','[/]',2),
        
'Softbank_M'=> array('cellular','^MOT-','[/(\s]',1),
        
'Softbank_' => array('cellular','^Vodafone|^softbank','[/]',2),
        
'Y!mobile_' => array('cellular','^emobile','[/(\s;]',3),
        
'WILLCOM_'  => array('cellular','WILLCOM|DDIPOCKET','[/(;)]',4),
        
// パソコン・ブラウザ
        
'Opera'     => array('PC','(opera)(?:\/|\s)+(.*?[^( ])(?:\s|\()','opera'),
        
'Opera2'    => array('PC','(opera)(?:\/|\s)+(.*)','opera'),
        
'Firefox'   => array('PC','(firefox)\/+(.*?[^\s])(?:\s|$)','firefox'),
        
'Internet Explorer'=> array('PC','(msie)\s+(.*?[^;]);','msie'),
        
'Chrome'    => array('PC','(chrome)\/+(.*)\s+','chrome'),
        
'Safari'    => array('PC','(Version)\/+(.*)\s(safari)\/+','safari'),
    );
    
    
// USER_AGENTの判定テーブルから、端末種別、キャリアをセット
    
$dev_type 'その他';
    
$device   'Others';
    
$brawser  '???';
    foreach(
$ua_reg_tbl as $idx => $param_ary){
        
// 端末種別のセット
        
$dev_type  $param_ary[0];
        
// 正規表現パターン
        
$reg_ptn1  '/'.$param_ary[1].'/i';
        
// パソコンのブラウザ判断
        
if($dev_type == 'PC'){
            if(!
preg_match('/\b'.$param_ary[2].'/i',$ua_str) ){continue;}
            if( 
preg_match($reg_ptn1,$ua_str,$rtn_ary) ){
                
$brawser $rtn_ary[2];
                
$device  $idx;
                break;
            }
        }
        
// スマートフォン
        
elseif($dev_type == 'smapho'){
            if(
preg_match($reg_ptn1,$ua_str,$rtn_ary) ){
                
$brawser $rtn_ary[2];
                
$device  $rtn_ary[1];
                break;
            }
        }
        
// 携帯電話
        
elseif($dev_type == 'cellular'){
            if(
preg_match($reg_ptn1,$ua_str) ){
                list(
$device,$wk_num) = explode('_',$idx);
                
// 機種名の取得
                
$wk_ary  preg_split("|$param_ary[2]|",$ua_str);
                
$brawser $wk_ary$param_ary[3] ];
                break;
            }
        }
    }
    
    return array(
$dev_type,$device,$brawser);
}

/* --------------------------------------------------------------
 *    ユーザエージェント取得確認用のテストデータ(2012.2.9現在)
 * -------------------------------------------------------------- */
function useragent_data_set($idx){
    
$ua_ary = array();
/* ------SmartPhoneのuser agent ------- */
//[iPhone] ... iOS1,iOS2,iOS3,iOS4,iOS5 --> iPhone; OS 5_0_1(sp)
$ua_ary['iPhone'] = 'Mozilla/5.0 (iPhone; CPU iPhone OS 5_0_1 like Mac OS X) AppleWebKit/534.46'.
                    
' (KHTML, like Gecko) Mobile/9A405';
//[iPod]   ... iOS2,iOS4,iOS5 -->  iPod; OS 5_0_1(sp)
$ua_ary['iPod'] = 'Mozilla/5.0 (iPod; CPU iPhone OS 5_0_1 like Mac OS X) AppleWebKit/534.46 '.
                  
'(KHTML, like Gecko) Version/5.1 Mobile/9A405 Safari/7534.48.3';
//[iPad]   ... iOS3,iOS4,iOS5 -->  iPad; OS 5_0_1(sp)
$ua_ary['iPad'] = 'Mozilla/5.0 (iPad; CPU OS 5_0_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko)'.
                  
' Version/5.1 Mobile/9A405 Safari/7534.48.3';
//[Android]... Android OS 1.5,1.6,2.x,3.x,4.x --> Android 4.0.1;
$ua_ary['Android'] = 'Mozilla/5.0 (Linux; U; Android 4.0.1; ja-jp; Galaxy Nexus Build/ITL41D) '.
                     
'AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30';
//[Windows Phone]... OS6.x,OS7.x -->  Windows Phone OS 7.5; 又は Windows Phone 6.5.3.5
$ua_ary['Win-Phone'] = 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0;'.
                       
' FujitsuToshibaMobileCommun; IS12T; KDDI)';
//[BlackBerry]... 9000,9300,9700,9780,9900-->BlackBerry 9900; 又は BlackBerry9700/5.0.0.1014 
$ua_ary['BlackBerry'] = 'Mozilla/5.0 (BlackBerry; U; BlackBerry 9900; ja) AppleWebKit/534.11+'.
                        
' (KHTML, like Gecko) Version/7.1.0.74 Mobile Safari/534.11+';

/* ------パソコン用のuser agent ------- */
//[Firefox 3.6.15]
$ua_ary['Firefox'] = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2.15)'.
                     
' Gecko/20110303 Firefox/3.6.15 ( .NET CLR 3.5.30729)';
//[MSIE 8.0]
$ua_ary['MSIE']    = 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; YTB730; GTB6.6;'.
                     
' .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152;'.
                     
' .NET CLR 3.5.30729; CMNTDF)';
//[Chrome 10.0.648.151]
$ua_ary['Chrome']  = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko)'.
                     
' Chrome/10.0.648.151 Safari/534.16';
//[Safari 5.0.4]
$ua_ary['Safari']  = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ja-JP) AppleWebKit/533.20.25 (KHTML, like Gecko)'.
                     
' Version/5.0.4 Safari/533.20.27';
//[Opera 11.01]
$ua_ary['Opera']   = 'Opera/9.80 (Windows NT 5.1; U; ja) Presto/2.7.62 Version/11.01';

/* -------携帯電話のユーザエージェント ------- */
//[DoCoMo]-->DoCoMo/バージョン space or /機種名 ( or /
$ua_ary['Docomo']  = 'DoCoMo/2.0 N01C(c500;TB;W24H16)';

//[AU] -->KDDI-機種名 UP.Browser/xxxバージョン 又は UP.Browser/xxxバージョン-機種名
$ua_ary['AU']      = 'KDDI-SA31 UP.Browser/6.2.0.7.3.129 (GUI) MMP/2.0';
$ua_ary['AU-T']    = 'UP.Browser/3.04-SN12 UP.Link/3.4.4';

//[SoftBank] -->J-PHONE or Vodafone or SoftBank/バージョン/機種名/(なしもある)
$ua_ary['SoftBank-J'] = 'J-PHONE/4.0/J-SH51/SN12345678901 SH/0001a Profile/MIDP-1.0 Configuration/CLDC-1.0';
$ua_ary['SoftBank-M'] = 'MOT-C980/x.x.x MIB/2.2.2 Profile/MIDP-2.0 Configuration/CLDC-1.1';
$ua_ary['SoftBank-V']  = 'Vodafone/1.0/V904SH/SHJ001/SN123456789012345 Browser/VF-NetFront/3.3 Profile/'.
                         
'MIDP-2.0 Configuration/CLDC-1.1';
$ua_ary['SoftBank']    = 'SoftBank/1.0/910T/TJ001/SN123456789012345 Browser/NetFront/3.3 Profile/'.
                         
'MIDP-2.0 Configuration/CLDC-1.1';

//[emobile]-->emobile/xxxバージョンspace(機種名;
$ua_ary['emobile'] = 'emobile/1.0.0 (H11T; like Gecko; Wireless) NetFront/3.4';

//[WILLCOM]-->WILLCOM or DDIPOCKET;メーカー/機種名/
$ua_ary['WILLCOM'] = 'Mozilla/3.0(WILLCOM;KYOCERA/WX331K/2;1.0.3.13.000000/0.1/C100)Opera 7.2 EX';

    return 
$ua_ary[$idx];
}
?>