get_browser()用法

来源:互联网 发布:剑灵火炮兰捏脸数据 编辑:程序博客网 时间:2024/06/06 02:31

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] =>
)

 

0 0
原创粉丝点击