Небольшая штукенция, определяет браузер\ос\тип браузера по юзерагенту (текущему из $_SERVER['HTTP_USER_AGENT']б или из переданного в конструкторе параметра)
Что умеет: (+/-)
<?php
browser::autoDetect() // проводит все необходимые манипуляции для общего опознания, возвращает тип браузера (touch|web|wap|bot|NotDetect)
browser::is_android() // да|нет
browser::is_ios() // да|нет
browser::is_winphone() // да|нет
browser::is_blackberry() // да|нет
browser::is_bada() // да|нет
browser::is_touch() // да|нет
browser::is_pc() // да|нет
browser::is_wap() // да|нет
browser::is_bot() // да|нет
browser::viewType() // возвращает тип браузера (touch|web|wap|bot|NotDetect)
browser::viewName() // возвращает удобоваримое имя браузера, например Chrome/44.0 или Samsung GT-I9505
browser::viewSubName() // возвращает имя операционной системы (если возможно), например Windows 10 x64 или iOS 8.4
browser::viewFullString() // возвращает юзерагент
browser::Locale() // определяет локаль системы. принимает 1 аргумент = строку аналогичную по содержанию $_SERVER['HTTP_ACCEPT_LANGUAGE'], при отсутствии аргумента берет $_SERVER['HTTP_ACCEPT_LANGUAGE'] из текущего массива $_SERVER
Живой пример, он же тест:
http://smartoff.net/test/browser-detect/
По моей статистике, определяет 95% девайсов, но я его все еще порой дополняю
Код из теста, как пример использования:
открыть (+/-)
$browser = new browser();
$browser->autoDetect();
echo'<h1 style="font-size: 24px; text-align: center;">Спасибо за участие в тесте!</h1>
<div style="margin: 0 20px; text-align: center;">
<div style="display: inline-block; width: 80px; box-sizing: border-box; text-align: center; margin: 2px; background: #E6EDF3; border: 1px solid #93B4CC; text-align: center; margin: 2px; background: #E6EDF3;"><b>Android</b><br />'.($browser->is_android() ? '<span style="color: #0DCE56;">Yes</span>' : '<span style="color: #FD0D0D;">No</span>').'</div>
<div style="display: inline-block; width: 80px; box-sizing: border-box; text-align: center; margin: 2px; background: #E6EDF3; border: 1px solid #93B4CC; text-align: center; margin: 2px; background: #E6EDF3;"><b>iOS</b><br />'.($browser->is_ios() ? '<span style="color: #0DCE56;">Yes</span>' : '<span style="color: #FD0D0D;">No</span>').'</div>
<div style="display: inline-block; width: 80px; box-sizing: border-box; text-align: center; margin: 2px; background: #E6EDF3; border: 1px solid #93B4CC; text-align: center; margin: 2px; background: #E6EDF3;"><b>Win Phone</b><br />'.($browser->is_winphone() ? '<span style="color: #0DCE56;">Yes</span>' : '<span style="color: #FD0D0D;">No</span>').'</div>
<div style="display: inline-block; width: 80px; box-sizing: border-box; text-align: center; margin: 2px; background: #E6EDF3; border: 1px solid #93B4CC; text-align: center; margin: 2px; background: #E6EDF3;"><b>BlackBerry</b><br />'.($browser->is_blackberry() ? '<span style="color: #0DCE56;">Yes</span>' : '<span style="color: #FD0D0D;">No</span>').'</div>
<div style="display: inline-block; width: 80px; box-sizing: border-box; text-align: center; margin: 2px; background: #E6EDF3; border: 1px solid #93B4CC; text-align: center; margin: 2px; background: #E6EDF3;"><b>Bada</b><br />'.($browser->is_bada()? '<span style="color: #0DCE56;">Yes</span>' : '<span style="color: #FD0D0D;">No</span>').'</div>
</div>
<div style="margin: 0 20px; text-align: center;">
<div style="display: inline-block; width: 80px; box-sizing: border-box; text-align: center; margin: 2px; background: #E6EDF3; border: 1px solid #93B4CC; text-align: center; margin: 2px; background: #E6EDF3;"><b>Touch</b><br />'.($browser->is_touch() ? '<span style="color: #0DCE56;">Yes</span>' : '<span style="color: #FD0D0D;">No</span>').'</div>
<div style="display: inline-block; width: 80px; box-sizing: border-box; text-align: center; margin: 2px; background: #E6EDF3; border: 1px solid #93B4CC; text-align: center; margin: 2px; background: #E6EDF3;"><b>PC</b><br />'.($browser->is_pc() ? '<span style="color: #0DCE56;">Yes</span>' : '<span style="color: #FD0D0D;">No</span>').'</div>
<div style="display: inline-block; width: 80px; box-sizing: border-box; text-align: center; margin: 2px; background: #E6EDF3; border: 1px solid #93B4CC; text-align: center; margin: 2px; background: #E6EDF3;"><b>Wap</b><br />'.($browser->is_wap() ? '<span style="color: #0DCE56;">Yes</span>' : '<span style="color: #FD0D0D;">No</span>').'</div>
<div style="display: inline-block; width: 80px; box-sizing: border-box; text-align: center; margin: 2px; background: #E6EDF3; border: 1px solid #93B4CC; text-align: center; margin: 2px; background: #E6EDF3;"><b>Bot</b><br />'.($browser->is_bot() ? '<span style="color: #0DCE56;">Yes</span>' : '<span style="color: #FD0D0D;">No</span>').'</div>
</div>
<hr />
<div style="padding: 2px 12px;">
<b>Тип браузера</b>: '.ucfirst($browser->viewType()).'
<br />
<b>Название</b>: '.$browser->viewName().'
<br />
<b>Операционная система</b>: '.$browser->viewSubName().'
<br />
<b>UserAgent</b>:'.pre_str($browser->viewFullString()). '
</div>';
Что сподвигло написать его, когда есть MobileDetect?
я о нем тогда не знал. люблю писать. мой меньше
Вау, с ОМ на сайт не пускает, предлагает скачать ту же ом или долфин, а вообще это не правильно, я не говорю конечно что надо верстать для ом, но не пускать на сайт это уж лишнее, я ж ничего не сломаю если зайду
Имя класса с маленькой :-| не часто такое встретишь
FROSTY!?, Скачай обычную оперу
Swank, У меня не андроид)
Когда-то искал именно такое ))))
Так-как в MobileDetect нет определения Тач/Не тач (хотя многие и просили автора это сделать)
накопится неточных определений побольше, дополню класс и обновлю.
по поводу МобайлДетект: я совсем другой подход использую, на сколько я понимаю, он ищет в юзерагенте известные ему ключи, я же пытаюсь анализировать определенные части юзерагента, и на их основе получить нужные мне данные
за одно исключая по возможности вредные вкрапления, как например наличие строк android и mac os в юзерагенте windows phone