Как определить, является ли это мобильным устройством с PHP? - PullRequest
13 голосов
/ 22 декабря 2008

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

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

Ответы [ 11 ]

15 голосов
/ 22 декабря 2008

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

5 голосов
/ 03 мая 2010

Вы должны взглянуть на 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
}
?>    
4 голосов
/ 22 декабря 2008

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

3 голосов
/ 25 ноября 2012

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

$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

2 голосов
/ 31 марта 2009

Традиционно мобильные устройства обнаруживаются путем сравнения заголовка агента пользователя 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()
1 голос
/ 22 декабря 2008

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

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

0 голосов
/ 18 мая 2015

Это не лучший вариант, чтобы определить мобильное устройство, проверив пользовательский агент. Вы должны присоединиться к проверке ширины устройства 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;

}
0 голосов
/ 13 января 2009

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

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

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

0 голосов
/ 13 января 2009

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

0 голосов
/ 22 декабря 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...