基于php判斷客戶端類型
在網(wǎng)站用戶數(shù)據(jù)統(tǒng)計(jì)的時(shí)候,我們經(jīng)常需要獲取用戶瀏覽器的類型和操作系統(tǒng)的類型,本文主要介紹的是基于php判斷客戶端類型,有需要的朋友可以來了解一下。
方法一:
/** * * 根據(jù)php的$_SERVER['HTTP_USER_AGENT'] 中各種瀏覽器訪問時(shí)所包含各個(gè)瀏覽器特定的字符串來判斷是屬于PC還是移動(dòng)端 * @author discuz3x * @lastmodify 2014-04-09 * @return BOOL */ function checkmobile() { global $_G; $mobile = array(); //各個(gè)觸控瀏覽器中$_SERVER['HTTP_USER_AGENT']所包含的字符串?dāng)?shù)組 static $touchbrowser_list =array('iphone', 'android', 'phone', 'mobile', 'wap', 'netfront', 'java', 'opera mobi', 'opera mini', 'ucweb', 'windows ce', 'symbian', 'series', 'webos', 'sony', 'blackberry', 'dopod', 'nokia', 'samsung', 'palmsource', 'xda', 'pieplus', 'meizu', 'midp', 'cldc', 'motorola', 'foma', 'docomo', 'up.browser', 'up.link', 'blazer', 'helio', 'hosin', 'huawei', 'novarra', 'coolpad', 'webos', 'techfaith', 'palmsource', 'alcatel', 'amoi', 'ktouch', 'nexian', 'ericsson', 'philips', 'sagem', 'wellcom', 'bunjalloo', 'maui', 'smartphone', 'iemobile', 'spice', 'bird', 'zte-', 'longcos', 'pantech', 'gionee', 'portalmmm', 'jig browser', 'hiptop', 'benq', 'haier', '^lct', '320x320', '240x320', '176x220'); //window手機(jī)瀏覽器數(shù)組【猜的】 static $mobilebrowser_list =array('windows phone'); //wap瀏覽器中$_SERVER['HTTP_USER_AGENT']所包含的字符串?dāng)?shù)組 static $wmlbrowser_list = array('cect', 'compal', 'ctl', 'lg', 'nec', 'tcl', 'alcatel', 'ericsson', 'bird', 'daxian', 'dbtel', 'eastcom', 'pantech', 'dopod', 'philips', 'haier', 'konka', 'kejian', 'lenovo', 'benq', 'mot', 'soutec', 'nokia', 'sagem', 'sgh', 'sed', 'capitel', 'panasonic', 'sonyericsson', 'sharp', 'amoi', 'panda', 'zte'); $pad_list = array('pad', 'gt-p1000'); $useragent = strtolower($_SERVER['HTTP_USER_AGENT']); if(dstrpos($useragent, $pad_list)) { return false; } if(($v = dstrpos($useragent, $mobilebrowser_list, true))){ $_G['mobile'] = $v; return '1'; } if(($v = dstrpos($useragent, $touchbrowser_list, true))){ $_G['mobile'] = $v; return '2'; } if(($v = dstrpos($useragent, $wmlbrowser_list))) { $_G['mobile'] = $v; return '3'; //wml版 } $brower = array('mozilla', 'chrome', 'safari', 'opera', 'm3gate', 'winwap', 'openwave', 'myop'); if(dstrpos($useragent, $brower)) return false; $_G['mobile'] = 'unknown'; //對(duì)于未知類型的瀏覽器,通過$_GET['mobile']參數(shù)來決定是否是手機(jī)瀏覽器 if(isset($_G['mobiletpl'][$_GET['mobile']])) { return true; } else { return false; } } /** * 判斷$arr中元素字符串是否有出現(xiàn)在$string中 * @param $string $_SERVER['HTTP_USER_AGENT'] * @param $arr 各中瀏覽器$_SERVER['HTTP_USER_AGENT']中必定會(huì)包含的字符串 * @param $returnvalue 返回瀏覽器名稱還是返回布爾值,true為返回瀏覽器名稱,false為返回布爾值【默認(rèn)】 * @author discuz3x * @lastmodify 2014-04-09 */ function dstrpos($string, $arr, $returnvalue = false) { if(empty($string)) return false; foreach((array)$arr as $v) { if(strpos($string, $v) !== false) { $return = $returnvalue ? $v : true; return $return; } } return false; }
方法二:
<?php function isMobile() { // 如果有HTTP_X_WAP_PROFILE則一定是移動(dòng)設(shè)備 if (isset ($_SERVER['HTTP_X_WAP_PROFILE'])) { return true; } // 如果via信息含有wap則一定是移動(dòng)設(shè)備,部分服務(wù)商會(huì)屏蔽該信息 if (isset ($_SERVER['HTTP_VIA'])) { // 找不到為flase,否則為true return stristr($_SERVER['HTTP_VIA'], "wap") ? true : false; } // 腦殘法,判斷手機(jī)發(fā)送的客戶端標(biāo)志,兼容性有待提高 if (isset ($_SERVER['HTTP_USER_AGENT'])) { $clientkeywords = array ('nokia', 'sony', 'ericsson', 'mot', 'samsung', 'htc', 'sgh', 'lg', 'sharp', 'sie-', 'philips', 'panasonic', 'alcatel', 'lenovo', 'iphone', 'ipod', 'blackberry', 'meizu', 'android', 'netfront', 'symbian', 'ucweb', 'windowsce', 'palm', 'operamini', 'operamobi', 'openwave', 'nexusone', 'cldc', 'midp', 'wap', 'mobile' ); // 從HTTP_USER_AGENT中查找手機(jī)瀏覽器的關(guān)鍵字 if (preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT']))) { return true; } } // 協(xié)議法,因?yàn)橛锌赡懿粶?zhǔn)確,放到最后判斷 if (isset ($_SERVER['HTTP_ACCEPT'])) { // 如果只支持wml并且不支持html那一定是移動(dòng)設(shè)備 // 如果支持wml和html但是wml在html之前則是移動(dòng)設(shè)備 if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false) && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'], 'text/html')))) { return true; } } return false; } ?>
判斷手機(jī)端是IOS還是Android
代碼如下:
/** * 判斷是否手機(jī)訪問 */ function is_mobile() { static $is_mobile; if (isset($is_mobile)) return $is_mobile; if (empty($_SERVER['HTTP_USER_AGENT'])) { $is_mobile = false; } elseif (strpos($_SERVER['HTTP_USER_AGENT'], 'Mobile') !== false // many mobile devices (all iPhone, iPad, etc.) || strpos($_SERVER['HTTP_USER_AGENT'], 'Android') !== false || strpos($_SERVER['HTTP_USER_AGENT'], 'Silk/') !== false || strpos($_SERVER['HTTP_USER_AGENT'], 'Kindle') !== false || strpos($_SERVER['HTTP_USER_AGENT'], 'BlackBerry') !== false || strpos($_SERVER['HTTP_USER_AGENT'], 'Opera Mini') !== false || strpos($_SERVER['HTTP_USER_AGENT'], 'Opera Mobi') !== false ) { $is_mobile = true; } else { $is_mobile = false; } return $is_mobile; }
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
UPUPW 更新 64 位 Apache 系列 PHP 7.0 正式版
這篇文章主要介紹了UPUPW 更新 64 位 Apache 系列 PHP 7.0 正式版的相關(guān)資料,需要的朋友可以參考下2015-12-12tp5 實(shí)現(xiàn)列表數(shù)據(jù)根據(jù)狀態(tài)排序
今天小編就為大家分享一篇tp5 實(shí)現(xiàn)列表數(shù)據(jù)根據(jù)狀態(tài)排序,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-10-10百萬級(jí)別知乎用戶數(shù)據(jù)抓取與分析之PHP開發(fā)
這篇文章主要介紹了百萬級(jí)別知乎用戶數(shù)據(jù)抓取與分析之PHP開發(fā)的相關(guān)資料,需要的朋友可以參考下2015-09-09php??intval函數(shù)的用法示例小結(jié)
這篇文章主要介紹了php??intval函數(shù)的用法,intval()函數(shù)用于將字符串轉(zhuǎn)換為整數(shù),可以指定進(jìn)制數(shù),并可以處理前導(dǎo)零和非數(shù)字字符,本文通過示例給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10PHP執(zhí)行l(wèi)inux命令常用函數(shù)匯總
一般情況下,很少會(huì)用php去執(zhí)行l(wèi)inux命令,不過特殊情況下,你也許會(huì)用到這些函數(shù)。以前我知道有二個(gè)函數(shù)可以執(zhí)行l(wèi)inux命令,一個(gè)是exec,一個(gè)是shell_exec,通過本文給大家介紹PHP執(zhí)行l(wèi)inux命令常用函數(shù)匯總,需要的朋友參考下2016-02-02Zend Framework教程之動(dòng)作的基類Zend_Controller_Action詳解
這篇文章主要介紹了Zend Framework教程之動(dòng)作的基類Zend_Controller_Action的用法,結(jié)合實(shí)例形式詳細(xì)分析了動(dòng)作的基類Zend_Controller_Action具體功能,使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下2016-03-03