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] =>
)
- get_browser()用法
- php_check_syntax,highlight_string,php_strip_whitespace,str_word_count,get_defined_vars,get_browser
- 用法
- ,, 用法
- 用法
- 用法
- #用法
- ??用法
- !!用法
- CustDialog用法 SimpleAdapter 用法
- hibernate_Restrictions用法 hibernate_Restrictions用法
- extern用法+assert用法
- getParameterValues用法
- rpm用法
- Log4j用法
- NameSpace用法
- sp_executesql 用法
- ShellExecute用法
- ajax中的POST和GET传值
- 十进制数转换成二进制数
- xpages从Excel中导入数据
- C++——三分答案模板——UmBasketella
- 后台获取Form中的值
- get_browser()用法
- 实现Android后台发邮件
- C++ 深拷贝与浅拷贝
- 九度 oj 题目1480:最大上升子序列和
- iOS利用runtime追踪对象的每一个方法
- Android 日常开发总结的技术经验 60 条
- 为什么java bean里面不用基本类型作为字段?
- 笔记--Ubuntu 14.0.4下Mapbox源码分析1
- RestTemplate