get_browser()用法

get_browser()函数是用来分析USER_AGENT的,它的执行方法是自动获取客户端的USER_AGENT,然后调用browscap.ini库进行分析得到结果

说明:

get_browser ([ string $user_agent [, bool $return_array = false ]] )

第一个参数$user_agent默认是null,自动获取客户端的USER_AGENT,也可以指定$user_agent进行分析,第二个参数是true/false,true表示返回数组, false返回对象。

一般的,PHP中并没有带browscap.ini这个文件,所以直接使用这个函数会有错误提示,需要在http://browsers.garykeith.com/downloads.asp下载php_browscap.ini,然后在 php.ini 中指定php_browscap.ini的绝对路径,盘符可以省略,比如我是在 php.ini 的Dynamic Extensions的最后加了一句browscap=/www/php5/ext/php_browscap.ini
。重启apache后,在phpinfo()中能看到下面这句

browscap /www/php5/ext/php_browscap.ini /www/php5/ext/php_browscap.ini

在不方便操作 php.ini 时,下面的这个函数起同样的作用。

<?php

if(ini_get("browscap")) {

    $browserinfo = get_browser(null, true);

}else{

    $browserinfo = php_get_browser($agent = NULL);

}

//print_r($browserinfo);

echo "USER_AGENT => ".$_SERVER['HTTP_USER_AGENT'] . "\r\n<br>";

foreach($browserinfo as $key=>$value){

echo "$key => $value \r\n<br>";

}

function php_get_browser($agent = NULL){

 

$browscapini='php_browscap.ini';

//*****************如果没有fnmatch()则建立该函数*****************//

if(!function_exists('fnmatch')) {

    function fnmatch($pattern, $string) {

        return preg_match("#^".strtr(preg_quote($pattern, '#'), array('\*' => '.*', '\?' => '.'))."$#i", $string);

    } // end

}

//*****************分析php_browscap.ini,返回数组*****************//

$agent=$agent?$agent:$_SERVER['HTTP_USER_AGENT'];

$yu=array();

$q_s=array("#\.#","#\*#","#\?#");

$q_r=array("\.",".*",".?");

if (file_exists($browscapini)==false) {

//$bini=file_get_contents('http://browsers.garykeith.com/stream.asp?PHP_BrowsCapINI');

//file_put_contents('php_browscap.ini',$bini);

 

 echo 'php_browscap.ini 不存在,请从http://browsers.garykeith.com/stream.asp下载';

 exit;

}

$brows=parse_ini_file($browscapini,true);

foreach($brows as $k=>$t){

  if(fnmatch($k,$agent)){

  $yu['browser_name_pattern']=$k;

  $pat=preg_replace($q_s,$q_r,$k);

  $yu['browser_name_regex']=strtolower("^$pat$");

    foreach($brows as $g=>$r){

      if(@$t['Parent']==$g){

        foreach($brows as $a=>$b){

          if($r['Parent']==$a){

            $yu=array_merge($yu,$b,$r,$t);

            foreach($yu as $d=>$z){

              $l=strtolower($d);

              $hu[$l]=$z;

            }

          }

        }

      }

    }

    break;

  }

}

return @$hu;

}

?>

手册中的例子

<?php

echo $_SERVER['HTTP_USER_AGENT'] . "\n\n";

$browser = get_browser(null, true);

print_r($browser);

?>

上例的输出类似于:

Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040803 Firefox/0.9.3

Array

(

    [browser_name_regex] => ^mozilla/5\.0 (windows; .; windows nt 5\.1; .*rv:.*) gecko/.* firefox/0\.9.*$

    [browser_name_pattern] => Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:*) Gecko/* Firefox/0.9*

    [parent] => Firefox 0.9

    [platform] => WinXP

    [browser] => Firefox

    [version] => 0.9

    [majorver] => 0

    [minorver] => 9

    [cssversion] => 2

    [frames] => 1

    [iframes] => 1

    [tables] => 1

    [cookies] => 1

    [backgroundsounds] =>

    [vbscript] =>

    [javascript] => 1

    [javaapplets] => 1

    [activexcontrols] =>

    [cdf] =>

    [aol] =>

    [beta] => 1

    [win16] =>

    [crawler] =>

    [stripper] =>

    [wap] =>

    [netclr] =>

)

get_browser()用法的更多相关文章

  1. PHP中$_SERVER的详细用法

    PHP中$_SERVER的详细用法 $_SERVER['PHP_SELF'] #当前正在执行脚本的文件名,与 document root相关. $_SERVER['argv'] #传递给该脚本的参数. ...

  2. PHP get_browser() 函数

    实例 查阅用户的 browscap.ini 文件,并返回用户浏览器的性能: <?phpecho $_SERVER['HTTP_USER_AGENT'];$browser = get_browse ...

  3. EditText 基本用法

    title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...

  4. jquery插件的用法之cookie 插件

    一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...

  5. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

  6. [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法

    一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...

  7. python enumerate 用法

    A new built-in function, enumerate() , will make certain loops a bit clearer. enumerate(thing) , whe ...

  8. [转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结

    本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...

  9. 【JavaScript】innerHTML、innerText和outerHTML的用法区别

    用法: <div id="test">   <span style="color:red">test1</span> tes ...

随机推荐

  1. 22. Angular 中用 a 标签 href 路由时在浏览器中显示异常 "%2F" 路由失败问题

    转自:https://blog.csdn.net/duansale/article/details/77455355 <a href="#/index">index&l ...

  2. VC眼中的众筹平台:将改变VC募集基金方式,成为下一个纳斯达克市场

    “一个好的投资平台可能会成为像纳斯达克一样的市场”,这是投资人给予众筹平台的未来憧憬. ”从长远的角度来说,众筹平台可能会改变VC募集基金的方式“,戈壁投资合伙人蒋涛说,“从二级市场看,不论是企业的I ...

  3. OPENCV(4) —— ImgProc

    2D图像滤波器基础类BaseFilter:dst(x,y) = F(src(x,y), src(x+1,y)... src(x+wdith-1,y), src(y+1,x)... src(x+widt ...

  4. 在Navicat中如何新建数据库和表并做查询

    上一篇文章,小编给大家分享了在Navicat中如何远程连接数据库,没有来得及上车的小伙伴可以戳这篇文章:在Ubuntu14.04中配置mysql远程连接教程.今天小编给大家分享一下如何在Navicat ...

  5. WPF通用框架ZFS《项目结构介绍01》_模块介绍

    首页介绍: 下图为项目运行首页图片, 大的结构分为三块: 1.Header首部模块(存放通知组件[全局通知.消息管理 ].扩展模块[皮肤.系统设置.关于作者.退出系统]) 2.Left左侧菜单模块(存 ...

  6. vim 基础学习之普通模式

    .操作 = 操作符 + 动作 aaa bbb例如,d是删除命令,b是移动到距离光标最近的字符串开头当我们执行db的时候,就会删除光标(不包括光标位置)到最近字串开头之间的字符dj则会删除光标所在行以及 ...

  7. 洛谷P2818 天使的起誓

    题目描述 Tenshi非常幸运地被选为掌管智慧之匙的天使.在正式任职之前,她必须和其他新当选的天使一样要宣誓.宣誓仪式是每位天使各自表述自己的使命,他们的发言稿放在n个呈圆形排列的宝盒中.这些宝盒按顺 ...

  8. C#开发 —— 基础知识

    C# 用于开发可以运行在 .Net 平台上的应用程序,C# 本身只是一种语言,尽管它是用于生成面向 .Net 环境的代码,但它本身不是 .Net 的一部分 Console.WriteLine 命名空间 ...

  9. c# array arraylist 泛型list

    1 array 数组  是存储相同类型元素的固定大小的数据的顺序集合.在内存中是连续存储的,所以索引速度非常快,而且赋值和修改元素也非常简单. //定义字符串数组 大小为3 string[] str1 ...

  10. hbase xshell

    用Xshell登陆linux主机后,在hbase shell下死活不能使用backspace和delete删除误输的指令,只得不停退出,重登,仔细输..又错了,再退出,再登,仔细输...又错了...又 ...