分享

php get_browser()用法

 竹林书屋@ 2012-04-22

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./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./stream.asp?PHP_BrowsCapINI');
//file_put_contents('php_browscap.ini',$bini);
 
 echo 'php_browscap.ini 不存在,请从http://browsers./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条评论

    发表

    请遵守用户 评论公约

    类似文章 更多