php解析浏览器请求httpuseragent获取操作系统浏览器版本号等数据代码
代码语言:php
所属分类:其他
代码描述:php解析浏览器请求httpuseragent获取操作系统浏览器版本号等数据代码
代码标签: php 解析 浏览器 请求 httpuseragent 获取 操作 系统 浏览器 版本号 数据 代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<?php const PLATFORM = 'platform'; const BROWSER = 'browser'; const BROWSER_VERSION = 'version'; function parse_user_agent($u_agent = null) { if( $u_agent === null && isset($_SERVER['HTTP_USER_AGENT']) ) { $u_agent = (string)$_SERVER['HTTP_USER_AGENT']; } if( $u_agent === null ) { throw new Exception('parse_user_agent requires a user agent'); } $platform = null; $browser = null; $version = null; $return = [ PLATFORM => &$platform, BROWSER => &$browser, BROWSER_VERSION => &$version ]; if( !$u_agent ) { return $return; } if( preg_match('/\((.*?)\)/m', $u_agent, $parent_matches) ) { preg_match_all(<<<'REGEX' /(?P<platform>BB\d+;|Android|Adr|Symbian|Sailfish|CrOS|Tizen|iPhone|iPad|iPod|Linux|(?:Open|Net|Free)BSD|Macintosh| Windows(?:\ Phone)?|Silk|linux-gnu|BlackBerry|PlayBook|X11|(?:New\ )?Nintendo\ (?:WiiU?|3?DS|Switch)|Xbox(?:\ One)?) (?:\ [^;]*)? (?:;|$)/imx REGEX , $parent_matches[1], $result); $priority = [ 'Xbox One', 'Xbox', 'Windows Phone', 'Tizen', 'Android', 'FreeBSD', 'NetBSD', 'OpenBSD', 'CrOS', 'X11', 'Sailfish' ]; $result[PLATFORM] = array_unique($result[PLATFORM]); if( count($result[PLATFORM]) > 1 ) { if( $keys = array_intersect($priority, $result[PLATFORM]) ) { $platform = reset($keys); } else { $platform = $result[PLATFORM][0]; } } elseif( isset($result[PLATFORM][0]) ) { $platform = $result[PLATFORM][0]; } } if( $platform == 'linux-gnu' || $platform == 'X11' ) { $platform = 'Linux'; } elseif( $platform == 'CrOS' ) { $platform = 'Chrome OS'; } elseif( $platform == 'Adr' ) { $platform = 'Android'; } elseif( $platform === null ) { if(preg_match_all('%(?P<platform>Android)[:/ ]%ix', $u_agent, $result)) { $platform = $result[PLATFORM][0]; } } preg_match_all(<<<'REGEX' %(?P<browser>Camino|Kindle(\ Fire)?|Firefox|Iceweasel|IceCat|Safari|MSIE|Trident|AppleWebKit| TizenBrowser|(?:Headless)?Chrome|YaBrowser|Vivaldi|IEMobile|Opera|OPR|Silk|Midori|(?-i:Edge)|EdgA?|CriOS|UCBrowser|Puffin| OculusBrowser|SamsungBrowser|SailfishBrowser|XiaoMi/MiuiBrowser|YaApp_Android| Baiduspider|Applebot|Facebot|Googlebot|YandexBot|bingbot|Lynx|Version|Wget|curl| Valve\ Steam\ Tenfoot| NintendoBrowser|PLAYSTATION\ (?:\d|Vita)+) \)?;? (?:[:/ ](?P<version>[0-9A-Z.]+)|/[A-Z]*)%ix REGEX , $u_agent, $result); // If nothing matched, return null (to avoid undefined index errors) if( !isset($result[BROWSER][0], $result[BROWSER_VERSION][0]) ) { if( preg_match('%^(?!Mozilla)(?P<browser>[A-Z0-9\-]+)([/ :](?P<version>[0-9A-Z.]+))?%ix', $u_agent, $result) ) { return [ PLATFORM => $platform ?: null, BROWSER => $result[BROWSER], BROWSER_VERSION => empty($result[BROWSER_VERSION]) ? null : $result[BROWSER_VERSION] ]; } return $return; } if( preg_match('/rv:(?P<version>[0-9A-Z.]+)/i', $u_agent, $rv_result) ) { $rv_result = $rv_result[BROWSER_VERSION]; } $browser = $result[BROWSER][0]; $version = $result[BROWSER_VERSION][0]; $lowerBrowser = array_map('strtolower', $result[BROWSER]); $find = function ( $search, &$key = null, &$value = null ) use ( $lowerBrowser ) { $search = (array)$search; foreach( $search as $val ) { $xkey = array_search(strtolower($val), $lowerBrowser); if( $xkey !== false ) { $value = $val; $key = $xkey; return true; } } return false; }; $findT = function ( array $search, &$key = null, &$value = null ) use ( $find ) { $value2 = null; if( $find(array_keys($search), $key, $value2) ) { $value = $search[$value2]; return true; } return false; }; $key = 0; $val = ''; if( $findT([ 'OPR' => 'Opera', 'Facebot' =&.........完整代码请登录后点击上方下载按钮下载查看
网友评论0