回答
这里是源:
代码:
<?php
$useragent=$_SERVER['HTTP_USER_AGENT'];
if(preg_match('/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm(os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i',$useragent)||preg_match('/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s)|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp(i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac(|\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt(|\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg(g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v)|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v)|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-|)|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i',substr($useragent,0,4)))
header('Location: http://detectmobilebrowser.com/mobile');
?>
谢谢你,这是我见过的最大的条件之一,但它很简单! – Abs 2010-11-07 13:48:02
HTTP_USER_AGENT可能是伪造的吗? – 2015-05-25 12:54:47
真棒!好的答案=) – 2015-06-01 07:06:31
没有可靠的方法。您也许可以查看user-agent string,但这可能是欺骗或省略。或者,您可以使用GeoIP服务来查找客户端的IP地址,但同样可以轻松绕过此操作。
GeoIP不会真的有所帮助。即使你可以确定他们的IP属于移动网络,他们也可以将连接绑定到台式计算机上。如果它不是一个移动网络,你真的没有任何设备可以通过Wi-Fi连接。你也有维护IP范围的全球数据库的问题。使用用户代理,即使它不完美,我会认为更可靠。这不是因为服务错误的浏览器内容真的是一个安全问题,所以谁在乎?如果有人欺骗UA,他们可能已经知道他们正在为自己做些什么。 – Mike 2015-11-01 02:37:28
我在PHP写this script to detect a mobile browser。
该代码根据用户代理字符串通过preg_match()检测用户经过数百次测试后仅在移动设备用户代理字符串中找到的单词来检测用户。它在所有当前移动设备上都具有100%的准确性,并且我正在更新它以支持更多的移动设备。该代码被称为isMobile和如下:
function isMobile() {
return preg_match("/(android|avantgo|blackberry|bolt|boost|cricket|docomo|fone|hiptop|mini|mobi|palm|phone|pie|tablet|up\.browser|up\.link|webos|wos)/i", $_SERVER["HTTP_USER_AGENT"]);
}
您可以使用它像这样:
// Use the function
if(isMobile()){
// Do something for only mobile users
}
else {
// Do something for only desktop users
}
将用户重定向到您的移动网站,我这样做:
// Create the function, so you can use it
function isMobile() {
return preg_match("/(android|avantgo|blackberry|bolt|boost|cricket|docomo|fone|hiptop|mini|mobi|palm|phone|pie|tablet|up\.browser|up\.link|webos|wos)/i", $_SERVER["HTTP_USER_AGENT"]);
}
// If the user is on a mobile device, redirect them
if(isMobile()){
header("Location: http://m.yoursite.com/");
}
让我知道你是否有任何问题和祝你好运!
@罗伯特哈维 - 我很困惑。他们都问基本相同的事情,所以我应该怎么做,除了回答这个问题?告诉他们每次使用别的东西?我新来这里所以我不知道如果我应该链接到第一个答案? – 2012-06-13 03:42:58
这个关键字“平板电脑”在一些IE8(PC)头文件中产生了一个问题,这些头文件有“Tablet PC 2.0”的响应 – 2013-10-29 15:55:34
为什么使用函数来存储条件而不是简单的变量并执行if($ isMobile){ }'? – D4V1D 2016-01-14 22:10:10
PHP device detection from 51Degrees.com确实如你所愿 - 检测移动设备和与检测到的设备相关的各种属性。使用简单,无需维护。设置完成4个简单步骤:
- 从http://sourceforge.net/projects/fiftyone/下载Zip文件。
- 将文件解压缩到PHP服务器中的目录中。
- 然后将下面的代码添加到您的PHP页面:
- 所有可用的设备的信息将被包含在$ _51d阵列:
require_once 'path/to/core/51Degrees.php';
require_once 'path/to/core/51Degrees_usage.php';
if ($_51d['IsMobile'])
{
//Start coding for a mobile device here.
}
51Degrees设备检测器不使用正则表达式进行检测。只有HTTP标头的重要部分用于匹配设备。这使得该解决方案成为最快(平均硬件每秒检测500万次)和最准确(99.97%准确率),因为每周都会向数据库添加数百个新设备(支持的设备类型包括控制台,智能电视,电子阅读器,平板电脑等)。
软件是在Mozilla公共许可证2下分发的开源软件,与商业和开源项目兼容。作为奖励51Degrees解决方案还包含一个补充PHP image optimiser,可以自动调整图像的移动设备的大小。
默认51Degrees PHP设备检测器使用免费的Lite数据文件,其中包含30000多个设备和50个属性。 Lite文件每3个月更新一次。如果您希望获得有关请求移动设备的更高级别的详细信息,则可以使用Premium和Enterprise数据文件。 Premium包含超过70000个设备,每个设备每周更新100个属性。企业每天更新,包含150000多个设备,每个设备有150个属性。
该软件是烦人的。不支持IIS,没有PHP只有库。 – Tschallacka 2016-04-14 07:21:06
我发现mobile detect是非常简单的,你可以只使用isMobile()
功能:)
我喜欢这个课程似乎会定期更新。 [最新版本](https://github.com/serbanghita/Mobile-Detect/releases)24天前本评论。 – showdev 2018-01-11 21:44:17
你只需要包括user_agent.php
文件可以从Mobile device detection in PHP页面中找到并使用下面的代码。
<?php
//include file
include_once 'user_agent.php';
//create an instance of UserAgent class
$ua = new UserAgent();
//if site is accessed from mobile, then redirect to the mobile site.
if($ua->is_mobile()){
header("Location:http://m.codexworld.com");
exit;
}
?>
我想知道,到现在为止,为什么有人没有公布接受答案的使用implode()
的稍微改变,以让代码的可读性更好。所以这里有云:
<?php
$uaFull = strtolower($_SERVER['HTTP_USER_AGENT']);
$uaStart = substr($uaFull, 0, 4);
$uaPhone = [ // use `= array(` if PHP<5.4
'(android|bb\d+|meego).+mobile',
'avantgo',
'bada\/',
'blackberry',
'blazer',
'compal',
'elaine',
'fennec',
'hiptop',
'iemobile',
'ip(hone|od)',
'iris',
'kindle',
'lge ',
'maemo',
'midp',
'mmp',
'mobile.+firefox',
'netfront',
'opera m(ob|in)i',
'palm(os)?',
'phone',
'p(ixi|re)\/',
'plucker',
'pocket',
'psp',
'series(4|6)0',
'symbian',
'treo',
'up\.(browser|link)',
'vodafone',
'wap',
'windows ce',
'xda',
'xiino'
]; // use `);` if PHP<5.4
$uaMobile = [ // use `= array(` if PHP<5.4
'1207',
'6310',
'6590',
'3gso',
'4thp',
'50[1-6]i',
'770s',
'802s',
'a wa',
'abac|ac(er|oo|s\-)',
'ai(ko|rn)',
'al(av|ca|co)',
'amoi',
'an(ex|ny|yw)',
'aptu',
'ar(ch|go)',
'as(te|us)',
'attw',
'au(di|\-m|r |s)',
'avan',
'be(ck|ll|nq)',
'bi(lb|rd)',
'bl(ac|az)',
'br(e|v)w',
'bumb',
'bw\-(n|u)',
'c55\/',
'capi',
'ccwa',
'cdm\-',
'cell',
'chtm',
'cldc',
'cmd\-',
'co(mp|nd)',
'craw',
'da(it|ll|ng)',
'dbte',
'dc\-s',
'devi',
'dica',
'dmob',
'do(c|p)o',
'ds(12|\-d)',
'el(49|ai)',
'em(l2|ul)',
'er(ic|k0)',
'esl8',
'ez([4-7]0|os|wa|ze)',
'fetc',
'fly(\-|_)',
'g1 u',
'g560',
'gene',
'gf\-5',
'g\-mo',
'go(\.w|od)',
'gr(ad|un)',
'haie',
'hcit',
'hd\-(m|p|t)',
'hei\-',
'hi(pt|ta)',
'hp(i|ip)',
'hs\-c',
'ht(c(\-| |_|a|g|p|s|t)|tp)',
'hu(aw|tc)',
'i\-(20|go|ma)',
'i230',
'iac(|\-|\/)',
'ibro',
'idea',
'ig01',
'ikom',
'im1k',
'inno',
'ipaq',
'iris',
'ja(t|v)a',
'jbro',
'jemu',
'jigs',
'kddi',
'keji',
'kgt(|\/)',
'klon',
'kpt ',
'kwc\-',
'kyo(c|k)',
'le(no|xi)',
'lg(g|\/(k|l|u)|50|54|\-[a-w])',
'libw',
'lynx',
'm1\-w',
'm3ga',
'm50\/',
'ma(te|ui|xo)',
'mc(01|21|ca)',
'm\-cr',
'me(rc|ri)',
'mi(o8|oa|ts)',
'mmef',
'mo(01|02|bi|de|do|t(\-| |o|v)|zz)',
'mt(50|p1|v)',
'mwbp',
'mywa',
'n10[0-2]',
'n20[2-3]',
'n30(0|2)',
'n50(0|2|5)',
'n7(0(0|1)|10)',
'ne((c|m)\-|on|tf|wf|wg|wt)',
'nok(6|i)',
'nzph',
'o2im',
'op(ti|wv)',
'oran',
'owg1',
'p800',
'pan(a|d|t)',
'pdxg',
'pg(13|\-([1-8]|c))',
'phil',
'pire',
'pl(ay|uc)',
'pn\-2',
'po(ck|rt|se)',
'prox',
'psio',
'pt\-g',
'qa\-a',
'qc(07|12|21|32|60|\-[2-7]|i\-)',
'qtek',
'r380',
'r600',
'raks',
'rim9',
'ro(ve|zo)',
's55\/',
'sa(ge|ma|mm|ms|ny|va)',
'sc(01|h\-|oo|p\-)',
'sdk\/',
'se(c(\-|0|1)|47|mc|nd|ri)',
'sgh\-',
'shar',
'sie(\-|m)',
'sk\-0',
'sl(45|id)',
'sm(al|ar|b3|it|t5)',
'so(ft|ny)',
'sp(01|h\-|v\-|v)',
'sy(01|mb)',
't2(18|50)',
't6(00|10|18)',
'ta(gt|lk)',
'tcl\-',
'tdg\-',
'tel(i|m)',
'tim\-',
't\-mo',
'to(pl|sh)',
'ts(70|m\-|m3|m5)',
'tx\-9',
'up(\.b|g1|si)',
'utst',
'v400',
'v750',
'veri',
'vi(rg|te)',
'vk(40|5[0-3]|\-v)',
'vm40',
'voda',
'vulc',
'vx(52|53|60|61|70|80|81|83|85|98)',
'w3c(\-|)',
'webc',
'whit',
'wi(g |nc|nw)',
'wmlb',
'wonu',
'x700',
'yas\-',
'your',
'zeto',
'zte\-'
]; // use `);` if PHP<5.4
$isPhone = preg_match('/' . implode($uaPhone, '|') . '/i', $uaFull);
$isMobile = preg_match('/' . implode($uaMobile, '|') . '/i', $uaStart);
if($isPhone || $isMobile) {
// do something with that device
} else {
// process normally
}
function isMobile(){
if(defined(isMobile))return isMobile;
@define(isMobile,(!([email protected](@$_SERVER['HTTP_USER_AGENT']))?0:
(
preg_match('/(android|bb\d+|meego).+mobile|silk|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm(os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i'
,$HUA)
||
preg_match('/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s)|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp(i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac(|\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt(|\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg(g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v)|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v)|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-|)|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i'
,$HUA)
)
));
}
echo isMobile()?1:0;
// OR
echo isMobile?1:0;
function isMobileDev(){
if(isset($_SERVER['HTTP_USER_AGENT']) and !empty($_SERVER['HTTP_USER_AGENT'])){
$user_ag = $_SERVER['HTTP_USER_AGENT'];
if(preg_match('/(Mobile|Android|Tablet|GoBrowser|[0-9]x[0-9]*|uZardWeb\/|Mini|Doris\/|Skyfire\/|iPhone|Fennec\/|Maemo|Iris\/|CLDC\-|Mobi\/)/uis',$user_ag)){
return true;
}else{
return false;
};
}else{
return false;
};
};
简单,你可以按照链接。它非常简单并且非常易于使用。我正在使用这个。它的工作正常。
使用这样
//include the file
require_once 'Mobile_Detect.php';
$detect = new Mobile_Detect;
// Any mobile device (phones or tablets).
if ($detect->isMobile()) {
//do some code
}
// Any tablet device.
if($detect->isTablet()){
//do some code
}
你也可以使用第三方API通过用户代理字符串做设备检测。其中一项服务是useragentinfo.co。只需注册并获得您的API令牌和下面是你如何让通过PHP的设备信息:
<?php
$useragent = $_SERVER['HTTP_USER_AGENT'];
// get api token at https://useragentinfo.co/
$token = "<api-token>";
$url = "https://useragentinfo.co/api/v1/device/";
$data = array('useragent' => $useragent);
$headers = array();
$headers[] = "Content-type: application/json";
$headers[] = "Authorization: Token " . $token;
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
$json_response = curl_exec($curl);
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($status != 200) {
die("Error: call to URL $url failed with status $status, response $json_response, curl_error " . curl_error($curl) . ", curl_errno " . curl_errno($curl));
}
curl_close($curl);
echo $json_response;
?>
这里是样本响应,如果访问者使用的是iPhone:
{
"device_type":"SmartPhone",
"browser_version":"5.1",
"os":"iOS",
"os_version":"5.1",
"device_brand":"Apple",
"bot":false,
"browser":"Mobile Safari",
"device_model":"iPhone"
}
这个工程!这个简单的脚本似乎是我发现的最好的脚本之一:(直到现在)它是唯一可以检测到我的华硕ZenPad平板电脑的脚本!但注意:他们将$ url更改为[https://useragentinfo.co/device](https://useragentinfo.co/device),请参阅他们的页面[https://useragentinfo.co](https:// useragentinfo .co):它给bash代码执行curl,但实际上你可以用你的PHP代替这个。但是,您应该省略“Authorization:Token ..”这一行,因为它似乎不再需要了(并且我看不到获取该API密钥的方法)。 – 2017-07-25 22:16:35
没有得到回应。只是显示{} 我认为API令牌是需要的,你可以请指导我如何生成令牌。 – 2017-08-23 11:46:07
$ data = array('user_agent'=> $ useragent); 它应该是:$ data = array('useragent'=> $ useragent); – 2017-08-23 12:25:22
<?php //-- Very simple way
$useragent = $_SERVER['HTTP_USER_AGENT'];
$iPod = stripos($useragent, "iPod");
$iPad = stripos($useragent, "iPad");
$iPhone = stripos($useragent, "iPhone");
$Android = stripos($useragent, "Android");
$iOS = stripos($useragent, "iOS");
//-- You can add billion devices
$DEVICE = ($iPod||$iPad||$iPhone||$Android||$iOS||$webOS||$Blackberry||$IEMobile||$OperaMini);
if ($DEVICE !=true) {?>
<!-- What you want for all non-mobile devices. Anything with all HTML codes-->
<?php }else{ ?>
<!-- What you want for all mobile devices. Anything with all HTML codes -->
<?php } ?>
- 1. 检测移动设备
- 2. navigator.userAgent检测移动设备?
- 3. 检测设备移动
- 4. 检测移动设备和重定向的最佳方法
- 5. 最简单,最便宜的方式来启动WPF测试
- 6. 简单的方法来检查用户是否是移动设备?
- 7. 推荐的方式来检测移动设备上的Ajax支持?
- 8. 移动设备被检测为非移动设备
- 9. 如何检测设备的移动?
- 10. 检测移动设备的Java
- 11. 在mvc3中检测移动设备的一些最佳做法
- 12. 检测设备向前移动
- 13. 检测室内移动设备(J2ME)
- 14. Rspec强制mobile_fu检测移动设备
- 15. 使用JavaScript检测移动设备
- 16. 检测窗口移动设备
- 17. PyUsb:检测设备移除
- 18. Java Servlets - 如何检测用户是否来自移动设备?
- 19. 最简单的方法来移动一个签名的数字
- 20. createTouch vs ontouchstart - 检测触摸屏设备的最佳方式?
- 21. 检测移动设备 - 和平板设备
- 22. 检测移动设备,如果移动使用替代的CSS样式表?
- 23. API来检测USB设备
- 24. 最简单的方式操作系统检测与PHP?
- 25. 在Android中使用ACCELEROMETER检测设备移动方向
- 26. 为移动设备定义CSS样式的最佳方法?
- 27. 为移动设备包含CSS样式的最佳方法?
- 28. 在Angular2中检测组件滚动的最简单方法
- 29. 在Grails应用程序中检测移动设备的简单方法是什么?
- 30. 以最简单的方式使用自动测试
您可以在检查屏幕分辨率的页面中放入一个javascript,但这将是客户端:http://www.howtocreate.co.uk/tutorials/javascript/browserwindow – thejh 2010-11-07 11:55:07
以下是您的解决方案:http:// code .google.com/p/php-mobile-detect2/ – 2011-04-19 17:09:16