Как определить, является ли это мобильным устройством с PHP?

Я пишу веб-сайт с PHP. Поскольку для доступа в Интернет кому-либо из них необходимо будет получить доступ, я должен создать мобильную версию. Как лучше всего проверить, является ли это мобильным устройством? Я не хочу иметь оператор switch с 50 устройствами в конце, так как я не только хочу поддерживать iPhone.

Есть ли класс PHP, который я мог бы использовать?

Solutions Collecting From Web of "Как определить, является ли это мобильным устройством с PHP?"

Вам нужно проверить несколько заголовков, которые отправляет клиент, например USER_AGENT и HTTP_ACCEPT. Ознакомьтесь с этой статьей для всеобъемлющего сценария обнаружения для мобильных пользовательских агентов в PHP.

Вы должны посмотреть на Tera-WURFL , это программный пакет на базе PHP и MySQL, который обнаруживает мобильные устройства и их возможности. Вот код Tera-WURFL, который вы использовали бы, чтобы определить, мобильное устройство для посещения:

<?php require_once("TeraWurfl.php"); $wurflObj = new TeraWurfl(); $wurflObj->GetDeviceCapabilitiesFromAgent(); if($wurflObj->capabilities['product_info']['is_wireless_device']){ // this is a mobile device }else{ // this is a desktop device } ?> 

Еще одна вещь, которую следует учитывать: многие сайты действительно предлагают другой URL-адрес для мобильных устройств. В качестве примера см. http://m.facebook.com . Благодаря увеличению возможностей устройств в наши дни это дает вашим пользователям возможность. Если они находятся на устройстве, которое может эффективно обрабатывать полный веб-сайт (используя масштабирование и многое другое), то они, вероятно, будут очень раздражены, будучи вынуждены в конкретный макет.

Для части перенаправления я использовал

 $arr = explode('.', $_SERVER['SERVER_NAME'], 2); $sub=$arr[0]; $need_redirect=false; if (!isset($_SERVER['HTTP_REFERER'])){ $need_redirect=true; }else{ $domain = parse_url($_SERVER['HTTP_REFERER']); $host = $domain['host']; if (!preg_match('/romajidesu\.com/', $host)){ $need_redirect=true; } } if ($need_redirect && ($sub!='m') && is_mobile() ){ $old_url=$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; $new_url='http://'.str_replace('www.', 'm.', $old_url); header("Location:".$new_url);die(); } 

Для более подробной информации о моем внедрении, пожалуйста, прочитайте мой блог по адресу http://haibuihoang.blogspot.com/2012/11/how-to-redirect-mobile-users-to-your.html.

Традиционно мобильные устройства были обнаружены путем сопоставления заголовка HTTP-пользователя HTTP со списком известных мобильных строк UA. Вместо этого новый подход пытается обнаружить наличие настольной ОС – все, что, как установлено, не является настольной ОС, должно быть мобильным.

Это приводит к гораздо менее ложным срабатываниям.

Я написал сообщение с образцом кода в Python здесь: http://notnotmobile.appspot.com

Вот фрагмент:

 import re # Some mobile browsers which look like desktop browsers. RE_MOBILE = { "iphone" : re.compile("ip(hone|od)", re.I), "winmo" : re.compile("windows\s+ce", re.I)} RE_DESKTOP = { "linux" : re.compile(r"linux", re.I), "windows" : re.compile(r"windows", re.I), "mac" : re.compile(r"os\s+(X|9)", re.I), "solaris" : re.compile(r"solaris", re.I), "bsd" : re.compile(r"bsd", re.I)} # Bots that don't contain desktop OSs. RE_BOT = re.compile(r"(spider|crawl|slurp|bot)") def is_desktop(user_agent): # Anything that looks like a phone isn't a desktop. for regex in RE_PHONE.values(): if regex.search(user_agent) is not None: return False # Anything that looks like a desktop probably is. for regex in RE_DESKTOP.values(): if regex.search(user_agent) is not None: return True # Bots get the desktop view. if RE_BOT.search(user_agent) is not None: return True # Anything else is probably a phone! return False def get_user_agent(request): # Some browsers put the User-Agent in a HTTP-X header if 'HTTP_X_OPERAMINI_PHONE_UA' in request.headers: return request.headers['HTTP_X_OPERAMINI_PHONE_UA'] elif: # Skyfire / Bolt / other mobile browsers ... else: return request.headers.get('HTTP_USER_AGENT', '') def view(request): user_agent = get_user_agent(request) if is_desktop(user_agent): return desktop_response() else: return mobile_response() 

Будет ли пользовательский агент в запросе предоставить вам достаточно информации для принятия решения?

Здесь есть хороший список пользовательских агентов .

Для обнаружения на основе User-Agent используйте базу данных WURFL . По крайней мере, это всеобъемлющий и постоянно обновляемый.

Если вы нацеливаетесь только на высококачественные (ish) телефоны, вам может не понадобиться их вообще обнаруживать, просто вставляйте соответствующие таблицы стилей мобильных устройств .

Если вы хотите настроить контент на какое-либо конкретное устройство, например, чтобы изменить размер изображений на ширину устройства, вы также можете использовать DeviceAtlas . На основе useragent запрашивающего устройства он укажет размер экрана, поддерживаемые форматы изображений, поддерживаемые типы разметки, максимальный размер страницы и т. Д.

Большинство мобильных сайтов используют исключительно user_agent. База данных с открытым исходным кодом возможностей устройства поддерживается на странице http://wurfl.sourceforge.net/. Используя wurlf и на основе user_agent, вы можете идентифицировать физическую и пиксельную ширину экрана, длину и многие другие параметры и принять решение об их рендеринге ,

Что такое мобильное устройство? Более слабый процессор? Более низкая пропускная способность? В действительности у него есть экран, разрешение которого ниже 320×240, а глубина цвета ниже 24.

Вы также должны использовать Javascript. Эта ссылка даст вам представление: http://www.w3schools.com/js/tryit.asp?filename=tryjs_browsermonitor

И эта ссылка научит вас, что это такое: http://www.w3schools.com/htmldom/dom_obj_screen.asp

Это не лучший вариант для решения мобильного устройства путем проверки агента пользователя. Вы должны присоединиться к проверке ширины устройства JavaScript с проверкой агента пользователя PHP. Но до некоторой степени проверка агента пользователя приемлема.

Я использую это. Не так хорошо, как WURFL, но легко решает мои проблемы:

 function is_mobile_device() { $agent=$_SERVER['HTTP_USER_AGENT']; if( strpos($agent,"Android") !== FALSE || strpos($agent,"IOS") !== FALSE || strpos($agent,"iPhone") !== FALSE || strpos($agent,"iPad") !== FALSE || strpos($agent,"iPod") !== FALSE || strpos($agent,"Symbian") !== FALSE || strpos($agent,"BlackBerry") !== FALSE || strpos($agent,"Opera Mini") !== FALSE ) { return TRUE; } return FALSE; }