我如何确定它是否';什么是带有PHP的移动设备?

我如何确定它是否';什么是带有PHP的移动设备?,php,mobile,Php,Mobile,我正在用PHP写一个网站。因为网络上的任何人都需要访问它才能访问互联网,所以我必须创建一个移动版本。如何最好地检查它是否是移动设备?我不想在最后有50台设备的switch语句,因为我不想只支持iPhone 是否有我可以使用的PHP类?您需要检查客户端发送的几个头,例如USER\u AGENT和HTTP\u ACCEPT。查看PHP中针对移动用户代理的全面检测脚本。请求中的用户代理是否会为您提供足够的信息以做出决定 有一个很好的。用于基于用户代理的检测,请使用。至少它是全面的,并且不断更新 如果你

我正在用PHP写一个网站。因为网络上的任何人都需要访问它才能访问互联网,所以我必须创建一个移动版本。如何最好地检查它是否是移动设备?我不想在最后有50台设备的switch语句,因为我不想只支持iPhone


是否有我可以使用的PHP类?

您需要检查客户端发送的几个头,例如USER\u AGENT和HTTP\u ACCEPT。查看PHP中针对移动用户代理的全面检测脚本。

请求中的用户代理是否会为您提供足够的信息以做出决定


有一个很好的。

用于基于用户代理的检测,请使用。至少它是全面的,并且不断更新


如果你只针对高端(ish)手机,那么你可能根本不需要检测它们,只是。

另一件需要考虑的事情:许多网站实际上会为移动设备提供不同的URL。请看一个例子。随着当今设备能力的提高,这给了用户一个选择。如果他们使用的设备能够很好地处理整个网站(使用缩放等),那么他们可能会对被迫进入特定布局感到非常恼火。

如果你想将内容调整到任何特定设备,例如将图像大小调整为设备的宽度,那么你也可以使用。
根据请求设备的用户代理,它将告诉您屏幕的大小,以及支持的图像格式、支持的标记类型、最大页面大小等。

大多数移动网站只使用用户代理。设备功能的开源数据库维护在
使用wurlf并基于用户代理,您可以识别屏幕物理和像素宽度、长度以及更多参数,并做出渲染决策。

什么是移动设备?CPU较弱?低带宽?实际上,它的屏幕分辨率低于320x240,颜色深度低于24

您还必须使用Javascript。此链接将为您提供一个想法:

并且,此链接将教您什么是什么:

传统上,通过将HTTP用户代理头与已知移动UA字符串列表进行比较来检测移动设备。相反,一种新的方法试图检测桌面操作系统的存在——任何被发现不是桌面操作系统的东西都必须是移动的

这就大大减少了误报

我在这里用Python编写了一篇文章,其中包含示例代码:

以下是一个片段:

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()
您应该看看,它是一个基于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
}
?>    

对于重定向部分,我使用了

$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();
}

有关我的实现的更多详细信息,请阅读我的博客,网址为

,通过检查用户代理来决定移动设备并不是最好的选择。您应该将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;

}

如果他们使用自己的探测器,那么它就坏了。它告诉我Mac OS X上的Opera 10是一款移动浏览器。如果你问的是这样的话,我没有调试他们的脚本:)当然,你应该一直测试你在互联网上读到的所有内容,但原则是,这篇文章已经四年了,错过了很多新设备。@BestAttention我希望你注意到答案是什么日期,因为它是供人们登录的门户。我不能期望他们知道登录服务器的地址。W3学校被否决,请鼓励使用MDN或其他javascript资源。