Как определить с какого устройства пользователь зашёл на сайт?
На сервере есть файл index.php и 2 папки, в одной мобильная версия сайта, во второй компьютерная. Теперь вопрос, как мне определить, с какого устройства зашли на сайт, с компьютера или с телефона? Если пользователь зашёл с пк, то грузиться сайт из папки 1. А если с телефона, то с папки 2. Просто хочу сделать десктопную и мобильную версию сайта.
Отслеживать
81k 9 9 золотых знаков 78 78 серебряных знаков 135 135 бронзовых знаков
Как лучше определить устройство, на PHP или JS?
Подскажите пожалуйста, какой метод для определения устройства лучше?
На сайте есть ссылка для обратной связи, нужно если человек c ПК зайдет, то форму ему показать, если с мобильного то на ватсап ссылку.
Я обычно разделял клиентов по устройству так, на js
if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) < // код для мобильных устройств >else < // код для обычных устройств >
Я вот и задался вопросом, а в чем разница? И стоит ли? Подключать целый php класс для этой задачи? Посоветуйте что лучше и грамотней в этом случае?
- Вопрос задан более трёх лет назад
- 308 просмотров
Комментировать
Решения вопроса 1
Класс, который вам посоветовали, определяет еще кучу разных параметров. Конечно, лучше использовать его.
Если хотите на js, то на странице Mobile-Detect’а есть форки для js.
Ответ написан более трёх лет назад
Нравится 2 4 комментария

Cheizer @Cheizer Автор вопроса
Но если нужно всего то отделить мобильных пользователей, почему PHP лучше этого JS?
if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) < // код для мобильных устройств >else < // код для обычных устройств >
Ну хотя бы потому, что у вас проверяются 8 вхождений, а в этом классе
protected static $browsers = array( //'Vivaldi' => 'Vivaldi', // @reference: https://developers.google.com/chrome/mobile/docs/user-agent 'Chrome' => '\bCrMo\b|CriOS|Android.*Chrome/[.0-9]* (Mobile)?', 'Dolfin' => '\bDolfin\b', 'Opera' => 'Opera.*Mini|Opera.*Mobi|Android.*Opera|Mobile.*OPR/[0-9.]+$|Coast/[0-9.]+', 'Skyfire' => 'Skyfire', 'Edge' => 'Mobile Safari/[.0-9]* Edge', 'IE' => 'IEMobile|MSIEMobile', // |Trident/[.0-9]+ 'Firefox' => 'fennec|firefox.*maemo|(Mobile|Tablet).*Firefox|Firefox.*Mobile|FxiOS', 'Bolt' => 'bolt', 'TeaShark' => 'teashark', 'Blazer' => 'Blazer', // @reference: http://developer.apple.com/library/safari/#documentation/AppleApplications/Reference/SafariWebContent/OptimizingforSafarioniPhone/OptimizingforSafarioniPhone.html#//apple_ref/doc/uid/TP40006517-SW3 'Safari' => 'Version.*Mobile.*Safari|Safari.*Mobile|MobileSafari', // http://en.wikipedia.org/wiki/Midori_(web_browser) //'Midori' => 'midori', //'Tizen' => 'Tizen', 'WeChat' => '\bMicroMessenger\b', 'UCBrowser' => 'UC.*Browser|UCWEB', 'baiduboxapp' => 'baiduboxapp', 'baidubrowser' => 'baidubrowser', // https://github.com/serbanghita/Mobile-Detect/issues/7 'DiigoBrowser' => 'DiigoBrowser', // http://www.puffinbrowser.com/index.php // https://github.com/serbanghita/Mobile-Detect/issues/752 // 'Puffin' => 'Puffin', // http://mercury-browser.com/index.html 'Mercury' => '\bMercury\b', // http://en.wikipedia.org/wiki/Obigo_Browser 'ObigoBrowser' => 'Obigo', // http://en.wikipedia.org/wiki/NetFront 'NetFront' => 'NF-Browser', // @reference: http://en.wikipedia.org/wiki/Minimo // http://en.wikipedia.org/wiki/Vision_Mobile_Browser 'GenericBrowser' => 'NokiaBrowser|OviBrowser|OneBrowser|TwonkyBeamBrowser|SEMC.*Browser|FlyFlow|Minimo|NetFront|Novarra-Vision|MQQBrowser|MicroMessenger', // @reference: https://en.wikipedia.org/wiki/Pale_Moon_(web_browser) 'PaleMoon' => 'Android.*PaleMoon|Mobile.*PaleMoon', );
Библиотека для определения типа и модели устройства на PHP
Mobile Detect это легковесный PHP класс для определения типа мобильного устройства, (включая и планшеты). Для определения устройства происходит анализ опции User-Agent и HTTP заголовков.
Общие возможности
- isMobile() — определяет является ли устройство мобильным
- isTablet() — определяет является ли устройство планшетом
Возможности библиотеки
Для проверки мы можем заюзать следующие методы:
Определение телефона
- isiPhone()
- isBlackBerry()
- isHTC()
- isNexus()
- isDellStreak()
- isMotorola()
- isSamsung()
- isSony()
- isAsus()
- isPalm()
- isGenericPhone()
Определение планшета
- isBlackBerryTablet()
- isiPad()
- isKindle()
- isSamsungTablet()
- isHTCtablet()
- isMotorolaTablet()
- isAsusTablet()
- isNookTablet()
- isAcerTablet()
- isYarvikTablet()
- isGenericTablet()
Определение операционной системы
- isAndroidOS()
- isBlackBerryOS()
- isPalmOS()
- isSymbianOS()
- isWindowsMobileOS()
- isiOS()
- isFlashLiteOS()
- isJavaOS()
- isNokiaOS()
- iswebOS()
- isbadaOS()
- isBREWOS()
Определение мобильного браузера
- isChrome()
- isDolfin()
- isOpera()
- isSkyfire()
- isIE()
- isFirefox()
- isBolt()
- isTeaShark()
- isBlazer()
- isSafari()
- isMidori()
- isGenericBrowser()
Примеры
// Подключение и инициализация класса require_once 'Mobile_Detect.php'; $detect = new Mobile_Detect; // Если мобильное устройство (телефон или планшет). if ( $detect->isMobile() ) < >// Если планшет if( $detect->isTablet() ) < >// Если не планшет и не мобильное устройство if( $detect->isMobile() && !$detect->isTablet() ) < >// Проверка специфической платформы: if( $detect->isiOS() ) < >if( $detect->isAndroidOS() ) < >// Так же можете воспользоваться методом is() для определения каких-то свойств. // ВНИМАНИЕ: данный метод работает в BETA-режиме, некоторые ключевые слова могут быть изменены в следующих релизах $detect->is('Chrome') $detect->is('iOS') $detect->is('UC Browser') // [. ] // Имитируем устройства, используя setUserAgent(): $userAgents = array( 'Mozilla/5.0 (Linux; Android 4.0.4; Desire HD Build/IMM76D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19', 'BlackBerry7100i/4.1.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 VendorID/103', // [. ] ); foreach($userAgents as $userAgent)< $detect->setUserAgent($userAgent); $isMobile = $detect->isMobile(); $isTablet = $detect->isTablet(); > // Извлекаем версию version() устройства. // ВНИМАНИЕ: данный метод работает в BETA-режиме, некоторые ключевые слова могут быть изменены в следующих релизах $detect->version('iPad'); // 4.3 (float) $detect->version('iPhone') // 3.1 (float) $detect->version('Android'); // 2.1 (float) $detect->version('Opera Mini'); // 5.0 (float) // [. ]
Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: http://mobiledetect.net/
Перевел: Станислав Протасевич
Урок создан: 15 Января 2014
Просмотров: 58676
Правила перепечатки
5 последних уроков рубрики «PHP»
Фильтрация данных с помощью zend-filter
Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.
![]()
Контекстное экранирование с помощью zend-escaper
Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.
![]()
Подключение Zend модулей к Expressive
Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.
![]()
Совет: отправка информации в Google Analytics через API
Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.
![]()
Подборка PHP песочниц
Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.
Определяем устройство с помощью PHP
Однажды этот прекрасный день пришёл. День, когда я физически осознал, что мне нужно определять, каким устройством пользуется посетитель сайта, чтобы соответственно отрисовывать для него страницу.
Прошлая методика с помощью медиазапросов по ширине экрана в моих глазах себя изжила — в таком случае на страницу всё равно загружается все элементы, только часть из скрывается или модернизируется. С одной стороны — это правильный и надёжный подход. С другой стороны, когда у нас присутствуют тяжёлые медиафайлы (например, видеофон) или немного другое расположение элементов, то будет намного проще и лучше грузить только нужные элементы в зависимости от того, каким устройством пользуется посетитель сайта.
Итак, я пошёл в интернет за готовым ответом, поскольку издавна исповедую практику «Сначала попробовать чужие костыли готовые решения, а если не нашёл — писать самостоятельно». Собственно, что я нашёл в интернете — это использовать $_SERVER[«HTTP_USER_AGENT»] или вообще пользоваться JavaScript’ом.
Затем, на одном форуме нашёл таки описание интересного и простого php-скрипта, которым уже достаточно давно пользуюсь и хочу поделиться с вами. Называется он Mobile-Detect (ссылка на GitHub). Это очень легковесное и удобное решение, которое использует ту самую строчку HTTP_USER_AGENT в комплекте с определёнными заголовками.
Проект постоянно поддерживается и обновляется, ибо весьма полезная вещь.
Подключается скрипт очень просто — с помощью requred_once мы указываем путь к файлу, а затем инициализируем объект:
require_once 'lib/Mobile_Detect.php'; // Подключаем скрипт $detect = new Mobile_Detect; // Создаём экземпляр класса
Настройка скрипта завершена. Теперь через использование $detect мы можем определять устройства. Нам доступны следующие переменные для определения типа устройств:
- isMobile — переменная, которая определяет любое мобильное устройство — как смартфон, так и планшет;
- isTablet — переменная, которая предназначена для определения только планшетных компьютеров.
Также существуют две переменные для определения операционной системы мобильного устройства:
- isiOS — определяет устройства под управлением iOs (iPhone и iPad);
- isAndroidOS — устройства на Android;
- isWindowsMobileOS и isWindowsPhoneOS — тут можно не просто узнать, что эта мобильная система производства Microsoft, но даже указать его версии. WindowsMobile уже не столь актуальна, поскольку мелкомягкие перешли на единую платформу, но если вдруг к нам зайдут пользователи Pocket PC и Smartphone, то мы модем предложить для них уникальный сервис;
- isBlackBerryOS — можно определить также смартфоны этого производителя. Для России аппараты BlackBerry не слишком актуальны, но возможно всё (вдруг вы или ваш заказчик — фанат или пользователь этого девайса, и нужно сделать что-то особенное для других пользователей);
- isPalmOS и isSymbianOS — для устройств на таких операционных системах есть переменные для определения. Для меня это очень редкие устройства — настолько, что в жизни таких не видел (но это не точно), только на сайты заходят редкие пользователи этих устройств.
Кроме того, скрипт может определять производителя устройства. Укажу всего несколько переменных для определения вендора устройства, которые нам доступны:
- isiPhone и isiPad — можно чётко определить для каждого из устройств Apple, что показывать его пользователю;
- isSamsung — для устройств производства Samsung, один из самых популярных производителей;
- isLG — телефоны производства LG также весьма популярны и для них можно сделать что-то особое;
- isVertu — посетитель вашего сайта обладатель телефона Vertu, нужно больше золота (и умножаем все цены в магазине на 10).
В реальности этих переменных намного больше — на демо-странице скрипта можно увидеть список поддерживаемых переменных.
Для тех, кто хочет убойной точности и избирательности, можно указывать нужные устройства через значения UserAgent, но по мне такая избирательность уж слишком чрезмерная (хотя бывает всякое).
Разработчики не перестают совершенствовать свой продукт и вполне вероятно, что скоро нам будет доступна возможность определения версий браузеров и устройств (в первую очередь для продукции Apple) — функции уже есть в последнем релизе, но пока они находятся на бета-тестировании.
Теперь давайте разберём на примере принцип работы скрипта. Допустим, мы должны выводить для посетителя сайта разные сообщения в зависимости от операционной системы его устройства. Это будет выглядеть так:
// Подключаем скрипт и создаём экземпляр класса require_once ‘Mobile_Detect.php’; $detect = new Mobile_Detect; // Условие — если это устройство от Apple if( $detect->isiOS() ) < echo 'Cтиль - это главное!'; >// Условие — если это устройство от Google if( $detect->isAndroidOS() )
Этот пример немного бесполезный, но очень простой. Немного подумав, этот скрипт можно исползовать для более изящных решений, например, в зависимости от операционной системы подключать разные стили и изображения, чтобы дизайн сайта адаптировался под устройство. Либо, если на вашей странице есть реклама мобильного приложения, выводил предложения о переходе на AppStore или Google Play соответственно. Идей для применения может быть много.
Предлагаю вашему вниманию ещё один пример, который используется на моём сайте. Суть кода следующая — мы выводим разные варианты шапки сайта в зависимости от типа устройства. Код (с сокращениями) следующий:
require_once 'functions/Mobile_Detect.php'; $detect = new Mobile_Detect; if ( $detect->isMobile() ) < // Здесь пишем код header'a который будет выводиться для мобильных устройств >else < // Здесь код, который выводится, если устройство не мобильное >
И напоследок самое сладкое — эта библиотека была портирована на JavaScript, Varnish Cache и LUA.
На основе этого скрипта написаны плагины и модули для WordPress, Drupal, Joomla, Magento, PrestaShop (там он вообще поставляется в стандартном пакете с версии 1.5), Laravel, Yii Framework и множество других фреймворков и языков и платформ.
Библиотека очень полезная и весьма доставляющая.
Всем отличного пользования!

Автор блога, веб-разработчик