PHP擷取用戶端作業系統,遊覽器類型及版本號碼

來源:互聯網
上載者:User
 'Edge',        'IE'              => 'MSIE|IEMobile|MSIEMobile|Trident/[.0-9]+',        'Chrome'          => '(?:\bCrMo\b|CriOS|Android)?.*Chrome/[.0-9]* (Mobile)?',        'Opera'           => 'Opera.*Mini|Opera.*Mobi|Android.*Opera|Mobile.*OPR/[0-9.]+|Coast/[0-9.]+',        'Firefox'         => 'fennec|firefox.*maemo|(Mobile|Tablet).*Firefox|Firefox.*Mobile',        'Safari'          => 'Version.*Mobile.*Safari|Safari.*Mobile|MobileSafari',        'UCBrowser'       => 'UC.*Browser|UCWEB', //UC遊覽器        'QQBrowser'       => 'MQQBrowser|TencentTraveler', //QQ遊覽器        'The world'       => 'The world', //世界之窗遊覽器        'Maxthon'         => 'Maxthon', //遨遊遊覽器        'baiduboxapp'     => 'baiduboxapp',        'baidubrowser'    => 'baidubrowser',        'NokiaBrowser'    => 'Nokia',    );    /**     * 作業系統正則     * note:行動裝置的系統需優先匹配     *      故正則需要放在電腦系統前面     * @var array     * @author wuzhc 2016-01-23     */    protected static $platforms = array(        'iOS'               => '\biPhone.*Mobile|\biPod|\biPad',        'Windows Mobile OS' => 'Windows CE.*(PPC|Smartphone|Mobile|[0-9]{3}x[0-9]{3})|Window Mobile|Windows Phone [0-9.]+|WCE;',        'Windows Phone OS'  => 'Windows Phone 10.0|Windows Phone 8.1|Windows Phone 8.0|Windows Phone OS|XBLWP7|ZuneWP7|Windows NT 6.[23]; ARM;',        'Android'           => 'Android',        'BlackBerry OS'     => 'blackberry|\bBB10\b|rim tablet os', //黑莓        'SymbianOS'         => 'Symbian|SymbOS|Series60|Series40|SYB-[0-9]+|\bS60\b', //塞班        'webOS'             => 'webOS|hpwOS',        'MicroMessenger'    => 'MicroMessenger', //        'Windows'           => 'Windows',        'Windows NT'        => 'Windows NT',        'Mac OS X'          => 'Mac OS X',        'Ubuntu'            => 'Ubuntu',        'Linux'             => 'Linux',        'Chrome OS'         => 'CrOS',    );    /**     * 版本號碼匹配正則(遊覽器 + 作業系統)     * @var array     * @author wuzhc 2016-01-22     */    protected static $versionRegexs = array(        // Browser        'Maxthon'       => 'Maxthon [VER]', //遨遊        'Chrome'        => array('Chrome/[VER]', 'CriOS/[VER]', 'CrMo/[VER]'), //Google        'Firefox'       => 'Firefox/[VER]', //Firefox        'Fennec'        => 'Fennec/[VER]', //Firefox        'IE'            => array('IEMobile/[VER];', 'IEMobile [VER]', 'MSIE [VER];', 'rv:[VER]'),        'Opera'         => array('OPR/[VER]', 'Opera Mini/[VER]', 'Version/[VER]', 'Opera [VER]'),        'UC Browser'    => 'UC Browser[VER]', //UC        'QQBrowser'     => array('MQQBrowser/[VER]','TencentTraveler/[VER]'), //QQ        'MicroMessenger'=> 'MicroMessenger/[VER]', //        'baiduboxapp'   => 'baiduboxapp/[VER]', //百度盒子        'baidubrowser'  => 'baidubrowser/[VER]', //百度        'Safari'        => array('Version/[VER]', 'Safari/[VER]' ), //Mac OS X中的瀏覽器        'NokiaBrowser'  => 'NokiaBrowser/[VER]', //諾基亞        // OS        'iOS'              => '\bi?OS\b [VER][ ;]{1}',        'BlackBerry'       => array('BlackBerry[\w]+/[VER]', 'BlackBerry.*Version/[VER]', 'Version/[VER]'), //黑莓手機        'Windows Phone OS' => array( 'Windows Phone OS [VER]', 'Windows Phone [VER]'),        'Windows Phone'    => 'Windows Phone [VER]',        'Windows NT'       => 'Windows NT [VER]',        'Windows'          => 'Windows NT [VER]',        'SymbianOS'        => array('SymbianOS/[VER]', 'Symbian/[VER]'), //塞班系統        'webOS'            => array('webOS/[VER]', 'hpwOS/[VER];'), //LG        'Mac OS X'         => 'MAC OS X [VER]', //蘋果系統        'BlackBerry OS'    => array('BlackBerry[\w]+/[VER]', 'BlackBerry.*Version/[VER]', 'Version/[VER]'),        'Android'          => 'Android [VER]',        'Chrome OS'        => 'CrOS x86_64 [VER]',    );    /**     * 擷取用戶端遊覽器     * @param $userAgent $_SERVER['HTTP_USER_AGENT']     * @param bool $isReTurnVersion //是否一起返回版本號碼     * @return string (類型 + 版本號碼)     * @author wuzhc 2016-01-23     */    public static function getBrowser($userAgent,$isReTurnVersion = false) {        if(empty($userAgent)) {            return '';        }        $clientBrowser = '';        foreach((array)self::$browsers as $key => $browser) {            if(self::match($browser,$userAgent)) {                $clientBrowser = $key;                break;            }        }        if($isReTurnVersion && $clientBrowser) {            $clientBrowser .= ' '.self::getVersion($clientBrowser,$userAgent);        }        return $clientBrowser;    }    /**     * 擷取用戶端作業系統     * @param $userAgent     * @param bool $isReTurnVersion //是否一起返回版本號碼     * @return string     * @author wuzhc 2016-01-23     */    public static function getPlatForm($userAgent,$isReTurnVersion = false) {        if(empty($userAgent)) {            return '';        }        $clientPlatform = '';        foreach((array)self::$platforms as $key => $platform) {            if(self::match($platform,$userAgent)) {                $clientPlatform = $key;                break;            }        }        if($isReTurnVersion && $clientPlatform) {            $clientPlatform .= ' '.self::getVersion($clientPlatform,$userAgent);        }        return $clientPlatform;    }    /**     * 查詢版本號碼     * @param $propertyName (作業系統名稱和或遊覽器名稱)     * @see self::$versionRegexs     * @param $userAgent     * @return string     * @author wuzhc 2016-01-22     */    public static function getVersion($propertyName,$userAgent) {        $verRegex = array_key_exists($propertyName,self::$versionRegexs)            ? self::$versionRegexs[$propertyName] : null;        if(!$verRegex) {            return '';        } else {            $verRegex = (array)$verRegex;        }        $match = self::matchVersion($verRegex,$userAgent); //開始匹配        if($match && stripos($propertyName,'window') !== false) { //windown系統版本號碼需要轉換            return self::getWinVersion($match);        } else {            return str_replace('_','.',$match);        }    }    /**     * 根據匹配結果轉換window系統版本號碼     * @param $match     * @return string     * @author wuzhc 2016-01-22     */    protected static function getWinVersion($match) {        if($match == '6.0') {            return 'Vista';        }        else if($match == '6.1') {            return '7';        }        else if($match == '6.2') {            return '8';        }        else if($match == '5.1') {            return 'XP';        }    }    /**     * 正則匹配     * @param array $regex     * @param $userAgent     * @return string     * @author wuzhc 2016-01-22     */    protected static function match($regex,$userAgent) {        return (bool)preg_match(sprintf('#%s#is',$regex),$userAgent,$matches);    }    /**     * 版本號碼正則匹配     * @param array $regexs     * @param $userAgent     * @return string     * @author wuzhc 2016-01-22     */    protected static function matchVersion($regexs,$userAgent) {        foreach((array)$regexs as $regex) {            $regex = str_replace('[VER]','([\w\.]+)', $regex);            $match = (bool)preg_match(sprintf('#%s#is',$regex),$userAgent,$matches);            if($match) {                return $matches[1];            }        }        return '';    }}
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.