Ты мобильник али комп? Или определение устройства посетителя.
Вот я и выудил время для очередной записи в блог. Недавно меня попросили сделать мобильную версию одного сайта, в связи с чем встал вопрос определения устройства посетителя и показа ему одного из двух вариантов сайта. Били и долгие поиски в интернете и разбор найденных исходников и много другое. Я даже попробовал 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; } |
Вот собственно и все, быстро и просто.
Огромное спасибо за данный скрипт, обязательно найду ему применение
[Ответить]
Действительно, очень полезно оказалось. Спасибо.
[Ответить]
спасибо!!
[Ответить]
Сделал, всё работает. Не тестировал, но можно ли сделать чтобы была кнопка перехода на полноценную версию сайта?
[Ответить]
ZekMan Reply:
Октябрь 12th, 2013 at 14:35
Конечно, делаем такую кнопку, по нажатию на нее например ставим параметр в сессию. Если таковой параметр есть — то просто пропускаем проверку на тип устройства. Вообще это очень старый код, так что не гарантирую что он будет работать корректно со всеми современными устройствами.
[Ответить]