Ты мобильник али комп? Или определение устройства посетителя.

Сентябрь 4th, 2010 Рубрики: PHP, Вкусняшки coubertin.cz www.colvillewoodworking.com

Вот я и выудил время для очередной записи в блог. Недавно меня попросили сделать мобильную версию одного сайта, в связи с чем встал вопрос определения устройства посетителя и показа ему одного из двух вариантов сайта. Били и долгие поиски в интернете и разбор найденных исходников и много другое. Я даже попробовал API Яндекса, и если честно оно меня разочаровало определив  мою  Opera как неизвестный телефон с разрешением экрана в 128*160… Но в конце концов я нашел скрипт который устраивал меня во всем, он без проблем прошел проверку всеми популярными браузерами и парочкой мобильников которые были под рукой. Дальше больше.
Собственно код оформлен в функцию что делает его использование более удобным ( можно подключить отдельным файлом ).
Сама функция:

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
<?php
function detect_mobile_device(){

  if(stristr($_SERVER['HTTP_USER_AGENT'],'windows')&&!stristr($_SERVER['HTTP_USER_AGENT'],'windows ce')){
    return false;
  }

  if(eregi('up.browser|up.link|windows ce|iemobile|mini|mmp|symbian|midp|wap|phone|pocket|mobile|pda|psp',$_SERVER['HTTP_USER_AGENT'])){
    return true;
  }

  if(stristr($_SERVER['HTTP_ACCEPT'],'text/vnd.wap.wml')||stristr($_SERVER['HTTP_ACCEPT'],'application/vnd.wap.xhtml+xml')){
    return true;
  }

  if(isset($_SERVER['HTTP_X_WAP_PROFILE'])||isset($_SERVER['HTTP_PROFILE'])||isset($_SERVER['X-OperaMini-Features'])||isset($_SERVER['UA-pixels'])){
    return true;
  }

  $a = array(
                    'acs-'=>'acs-',
                    'alav'=>'alav',
                    'alca'=>'alca',
                    'amoi'=>'amoi',
                    'audi'=>'audi',
                    'aste'=>'aste',
                    'avan'=>'avan',
                    'benq'=>'benq',
                    'bird'=>'bird',
                    'blac'=>'blac',
                    'blaz'=>'blaz',
                    'brew'=>'brew',
                    'cell'=>'cell',
                    'cldc'=>'cldc',
                    'cmd-'=>'cmd-',
                    'dang'=>'dang',
                    'doco'=>'doco',
                    'eric'=>'eric',
                    'hipt'=>'hipt',
                    'inno'=>'inno',
                    'ipaq'=>'ipaq',
                    'java'=>'java',
                    'jigs'=>'jigs',
                    'kddi'=>'kddi',
                    'keji'=>'keji',
                    'leno'=>'leno',
                    'lg-c'=>'lg-c',
                    'lg-d'=>'lg-d',
                    'lg-g'=>'lg-g',
                    'lge-'=>'lge-',
                    'maui'=>'maui',
                    'maxo'=>'maxo',
                    'midp'=>'midp',
                    'mits'=>'mits',
                    'mmef'=>'mmef',
                    'mobi'=>'mobi',
                    'mot-'=>'mot-',
                    'moto'=>'moto',
                    'mwbp'=>'mwbp',
                    'nec-'=>'nec-',
                    'newt'=>'newt',
                    'noki'=>'noki',
                    'opwv'=>'opwv',
                    'palm'=>'palm',
                    'pana'=>'pana',
                    'pant'=>'pant',
                    'pdxg'=>'pdxg',
                    'phil'=>'phil',
                    'play'=>'play',
                    'pluc'=>'pluc',
                    'port'=>'port',
                    'prox'=>'prox',
                    'qtek'=>'qtek',
                    'qwap'=>'qwap',
                    'sage'=>'sage',
                    'sams'=>'sams',
                    'sany'=>'sany',
                    'sch-'=>'sch-',
                    'sec-'=>'sec-',
                    'send'=>'send',
                    'seri'=>'seri',
                    'sgh-'=>'sgh-',
                    'shar'=>'shar',
                    'sie-'=>'sie-',
                    'siem'=>'siem',
                    'smal'=>'smal',
                    'smar'=>'smar',
                    'sony'=>'sony',
                    'sph-'=>'sph-',
                    'symb'=>'symb',
                    't-mo'=>'t-mo',
                    'teli'=>'teli',
                    'tim-'=>'tim-',
                    'tosh'=>'tosh',
                    'treo'=>'treo',
                    'tsm-'=>'tsm-',
                    'upg1'=>'upg1',
                    'upsi'=>'upsi',
                    'vk-v'=>'vk-v',
                    'voda'=>'voda',
                    'wap-'=>'wap-',
                    'wapa'=>'wapa',
                    'wapi'=>'wapi',
                    'wapp'=>'wapp',
                    'wapr'=>'wapr',
                    'webc'=>'webc',
                    'winw'=>'winw',
                    'winw'=>'winw',
                    'xda-'=>'xda-'
                  );

  if(isset($a[substr($_SERVER['HTTP_USER_AGENT'],0,4)])){
    return true;
  }
}
?>

ну и проверка происходит следующим образом:

1
2
3
4
if(detect_mobile_device()){
  header('Location: mobile_index.php');
  exit;
}

Вот собственно и все, быстро и просто.

Теги: ,

5 комментариев к “Ты мобильник али комп? Или определение устройства посетителя.”

  1. Ноябрь 13th, 2010 at 01:10
    1

    Огромное спасибо за данный скрипт, обязательно найду ему применение

    [Ответить]

  2. Ноябрь 16th, 2010 at 15:32
    2

    Действительно, очень полезно оказалось. Спасибо.

    [Ответить]

  3. Леха
    Май 28th, 2013 at 12:11
    3

    спасибо!!

    [Ответить]

  4. Октябрь 11th, 2013 at 16:36
    4

    Сделал, всё работает. Не тестировал, но можно ли сделать чтобы была кнопка перехода на полноценную версию сайта?

    [Ответить]

    ZekMan Reply:

    Конечно, делаем такую кнопку, по нажатию на нее например ставим параметр в сессию. Если таковой параметр есть — то просто пропускаем проверку на тип устройства. Вообще это очень старый код, так что не гарантирую что он будет работать корректно со всеми современными устройствами.

    [Ответить]

Написать комментарий