Ответов: 0 Просмотров: 1517
![](templates/InvisionExBB/im/spacer.gif) |
Приветствую всех!
Мне удалось найти в Интернете тут php-функцию определения браузера, умеющую отличать даже браузер Opera, но при этом эта функция почему-то не хочет читать версию Oper'ы. Версию других браузеров (я проверял ещё Firefox и Edge) определяет на ура, а вот Оперную версию - игнорирует, хотя видимых отличий в её написании от версий Firefox и Edge в строке HTTP_USER_AGENT - нет.
Помогите разобраться, пожалуйста. Ниже привожу код функции и её вызова:
PHP:
скопировать код в буфер обмена
function getBrowser1() { $u_agent = $_SERVER['HTTP_USER_AGENT']; $bname = 'Unknown'; $platform = 'Unknown'; $version= ""; if (preg_match('/linux/i', $u_agent)) {// First get the platform? $platform = 'linux'; } elseif (preg_match('/macintosh|mac os x/i', $u_agent)) { $platform = 'mac'; } elseif (preg_match('/windows|win32/i', $u_agent)) { $platform = 'windows'; }; if(preg_match('/MSIE/i',$u_agent) && !preg_match('/Opera/i',$u_agent)) {// Next get the name of the useragent yes seperately and for good reason $bname = 'Internet Explorer'; $ub = "MSIE"; $bname = 'Mozilla Firefox'; $ub = "Firefox"; $bname = 'Opera'; $ub = "Opera"; $bname = 'Google Chrome'; $ub = "Chrome"; $bname = 'Apple Safari'; $ub = "Safari"; $bname = 'Netscape'; $ub = "Netscape"; $bname = 'Edge'; $ub = "Edg"; $bname = 'Internet Explorer'; $ub = "MSIE"; }; // finally get the correct version number: $known = array('Version', $ub, 'other'); $pattern = '#(?<browser>' . join('|', $known) . ')[/ ]+(?<version>[0-9.|a-zA-Z.]*)#'; // we have no matching number just continue }; // see how many we have: $i = count($matches['browser']); if ($i != 1) {//we will have two since we are not using 'other' argument yet //see if version is before or after the name $version = (!empty($matches['version']) ? $matches['version'][0] : ''); } else { $version = (!empty($matches['version']) ? $matches['version'][1] : ''); }; } else { //$version = (!empty($matches['version']) ? $matches['version'][0] : ''); }; // check if we have a number: if ($version==null || $version=="") { $version="?"; }; return [ 'userAgent' => $u_agent, 'name' => $bname, 'version' => $version, 'platform' => $platform, 'pattern' => $pattern ]; } // invoke function $arBrowser = getBrowser1(); echo '<pre>'; echo '</pre>';
|