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