PHP获取客户端操作系统,游览器类型及版本号
web PHP 2020-06-15 1987 0
关于本站

“最难不过坚持”

本人承接扒站仿站,php网站维护,病毒查杀,网站编辑,网站改版,html制作

有需要网站维护,改版,病毒查杀,网站编辑,网站备案,html制作等相关的工作可以联系我。
本人有多年相关工作经验,也可提供免费咨询,交个朋友。
有需要探讨问题的朋友,也可以加我微信,共同探讨!
微信:15011482830 QQ:408917339

6460345 2613 39
最新评论
https://jueru.net/
评 留言
:weixiao:
评 留言
:shuijiao: :weiqu: :zhenbang: :leng:
评 留言
:yiwen: :yiwen: :yiwen: :yiwen:
评 EasySass: could not generate CSS file. See Output panel for details.
这个业务逻辑多少都有点奇怪了,阅读浏览次数增值在新闻详情页的控制器方法里setInc,这怎么还写进模型事件里了。如果非要用onAfterRead也可以,把新闻文章的内容单独分出来一个news_content表,然后把它和news做关联,然后给news_content表的onAfterRead事件做增值处理,这样点进新闻页内查询到文章内容时才会触发它。
评 TP6模型事件-查询后onAfterRead不好用
文章标签更多
ThinkPHP (254)
Mysql (58)
DedeCms (33)
jQuery (67)
证件照 (1)
setInc (4)
setDec (4)
onclick (5)
打开边栏(ESC) 关闭边栏(ESC)
<?php
/**
 * 客户端工具类
 *
 * For example:
 *
 * clientUtil::getBrowser($_SERVER['HTTP_USER_AGENT'],'是否显示版本号')  //获取客户端游览器类型和版本号
 * clientUtil::getPlatForm($_SERVER['HTTP_USER_AGENT],'是否显示版本号')  //获取客户端操作系统和版本号
 *
 * @author 2016-01-23
 */
class clientUtil {

    /**
     * 各类主流游览器正则 * @var array
     * @author 2016-01-22
     */
    protected static $browsers = array(
        'Edge'            => 'Edge',
        'IE'              => 'MSIE|IEMobile|MSIEMobile|Trident/[.0-9]+',
        'Chrome'          => '(?:\bCrMo\b|CriOS|Android)?.*Chrome/[.0-9]* (Mobile)?',
        'Opera'           => 'Opera.*Mini|Opera.*Mobi|Android.*Opera|Mobile.*OPR/[0-9.]+|Coast/[0-9.]+',
        'Firefox'         => 'fennec|firefox.*maemo|(Mobile|Tablet).*Firefox|Firefox.*Mobile',
        'Safari'          => 'Version.*Mobile.*Safari|Safari.*Mobile|MobileSafari',
        'UCBrowser'       => 'UC.*Browser|UCWEB', //UC游览器
        'QQBrowser'       => 'MQQBrowser|TencentTraveler', //QQ游览器
        'The world'       => 'The world', //世界之窗游览器
        'Maxthon'         => 'Maxthon', //遨游游览器
        'baiduboxapp'     => 'baiduboxapp',
        'baidubrowser'    => 'baidubrowser',
        'NokiaBrowser'    => 'Nokia',
    );

    /**
     * 操作系统正则
     * note:移动设备的系统需优先匹配
     *      故正则需要放在电脑系统前面
     * @var array
     * @author 2016-01-23
     */
    protected static $platforms = array(
        'iOS'               => '\biPhone.*Mobile|\biPod|\biPad',
        'Windows Mobile OS' => 'Windows CE.*(PPC|Smartphone|Mobile|[0-9]{3}x[0-9]{3})|Window Mobile|Windows Phone [0-9.]+|WCE;',
        'Windows Phone OS'  => 'Windows Phone 10.0|Windows Phone 8.1|Windows Phone 8.0|Windows Phone OS|XBLWP7|ZuneWP7|Windows NT 6.[23]; ARM;',
        'Android'           => 'Android',
        'BlackBerry OS'     => 'blackberry|\bBB10\b|rim tablet os', //黑莓
        'SymbianOS'         => 'Symbian|SymbOS|Series60|Series40|SYB-[0-9]+|\bS60\b', //塞班
        'webOS'             => 'webOS|hpwOS',
        'MicroMessenger'    => 'MicroMessenger', //微信
        'Windows'           => 'Windows',
        'Windows NT'        => 'Windows NT',
        'Mac OS X'          => 'Mac OS X',
        'Ubuntu'            => 'Ubuntu',
        'Linux'             => 'Linux',
        'Chrome OS'         => 'CrOS',
    );

    /**
     * 版本号匹配正则(游览器 + 操作系统)
     * @var array
     * @author 2016-01-22
     */
    protected static $versionRegexs = array(

        // Browser
        'Maxthon'       => 'Maxthon [VER]', //遨游
        'Chrome'        => array('Chrome/[VER]', 'CriOS/[VER]', 'CrMo/[VER]'), //谷歌
        'Firefox'       => 'Firefox/[VER]', //火狐
        'Fennec'        => 'Fennec/[VER]', //火狐
        'IE'            => array('IEMobile/[VER];', 'IEMobile [VER]', 'MSIE [VER];', 'rv:[VER]'),
        'Opera'         => array('OPR/[VER]', 'Opera Mini/[VER]', 'Version/[VER]', 'Opera [VER]'),
        'UC Browser'    => 'UC Browser[VER]', //UC
        'QQBrowser'     => array('MQQBrowser/[VER]','TencentTraveler/[VER]'), //QQ
        'MicroMessenger'=> 'MicroMessenger/[VER]', //微信
        'baiduboxapp'   => 'baiduboxapp/[VER]', //百度盒子
        'baidubrowser'  => 'baidubrowser/[VER]', //百度
        'Safari'        => array('Version/[VER]', 'Safari/[VER]' ), //Mac OS X中的浏览器
        'NokiaBrowser'  => 'NokiaBrowser/[VER]', //诺基亚

        // OS
        'iOS'              => '\bi?OS\b [VER][ ;]{1}',
        'BlackBerry'       => array('BlackBerry[\w]+/[VER]', 'BlackBerry.*Version/[VER]', 'Version/[VER]'), //黑莓手机
        'Windows Phone OS' => array( 'Windows Phone OS [VER]', 'Windows Phone [VER]'),
        'Windows Phone'    => 'Windows Phone [VER]',
        'Windows NT'       => 'Windows NT [VER]',
        'Windows'          => 'Windows NT [VER]',
        'SymbianOS'        => array('SymbianOS/[VER]', 'Symbian/[VER]'), //塞班系统
        'webOS'            => array('webOS/[VER]', 'hpwOS/[VER];'), //LG
        'Mac OS X'         => 'MAC OS X [VER]', //苹果系统
        'BlackBerry OS'    => array('BlackBerry[\w]+/[VER]', 'BlackBerry.*Version/[VER]', 'Version/[VER]'),
        'Android'          => 'Android [VER]',
        'Chrome OS'        => 'CrOS x86_64 [VER]',
    );


    /**
     * 获取客户端游览器
     * @param $userAgent $_SERVER['HTTP_USER_AGENT']
     * @param bool $isReTurnVersion //是否一起返回版本号
     * @return string (类型 + 版本号)
     * @author 2016-01-23
     */
    public static function getBrowser($userAgent,$isReTurnVersion = false) {
        if(empty($userAgent)) {
            return '';
        }
        $clientBrowser = '';
        foreach((array)self::$browsers as $key => $browser) {
            if(self::match($browser,$userAgent)) {
                $clientBrowser = $key;
                break;
            }
        }
        if($isReTurnVersion && $clientBrowser) {
            $clientBrowser .= ' '.self::getVersion($clientBrowser,$userAgent);
        }
        return $clientBrowser;
    }

    /**
     * 获取客户端操作系统
     * @param $userAgent
     * @param bool $isReTurnVersion //是否一起返回版本号
     * @return string
     * @author 2016-01-23
     */
    public static function getPlatForm($userAgent,$isReTurnVersion = false) {
        if(empty($userAgent)) {
            return '';
        }
        $clientPlatform = '';
        foreach((array)self::$platforms as $key => $platform) {
            if(self::match($platform,$userAgent)) {
                $clientPlatform = $key;
                break;
            }
        }
        if($isReTurnVersion && $clientPlatform) {
            $clientPlatform .= ' '.self::getVersion($clientPlatform,$userAgent);
        }
        return $clientPlatform;
    }

    /**
     * 查询版本号
     * @param $propertyName (操作系统名称和或游览器名称)
     * @see self::$versionRegexs
     * @param $userAgent
     * @return string
     * @author 2016-01-22
     */
    public static function getVersion($propertyName,$userAgent) {

        $verRegex = array_key_exists($propertyName,self::$versionRegexs)
            ? self::$versionRegexs[$propertyName] : null;
        if(!$verRegex) {
            return '';
        } else {
            $verRegex = (array)$verRegex;
        }

        $match = self::matchVersion($verRegex,$userAgent); //开始匹配
        if($match && stripos($propertyName,'window') !== false) { //windown系统版本号需要转换
            return self::getWinVersion($match);
        } else {
            return str_replace('_','.',$match);
        }
    }

    /**
     * 根据匹配结果转换window系统版本号
     * @param $match
     * @return string
     * @author 2016-01-22
     */
    protected static function getWinVersion($match) {
        if($match == '6.0') {
            return 'Vista';
        }
        else if($match == '6.1') {
            return '7';
        }
        else if($match == '6.2') {
            return '8';
        }
        else if($match == '5.1') {
            return 'XP';
        }
    }

    /**
     * 正则匹配
     * @param array $regex
     * @param $userAgent
     * @return string
     * @author 2016-01-22
     */
    protected static function match($regex,$userAgent) {
        return (bool)preg_match(sprintf('#%s#is',$regex),$userAgent,$matches);
    }

    /**
     * 版本号正则匹配
     * @param array $regexs
     * @param $userAgent
     * @return string
     * @author 2016-01-22
     */
    protected static function matchVersion($regexs,$userAgent) {
        foreach((array)$regexs as $regex) {
            $regex = str_replace('[VER]','([\w\.]+)', $regex);
            $match = (bool)preg_match(sprintf('#%s#is',$regex),$userAgent,$matches);
            if($match) {
                return $matches[1];
            }
        }
        return '';
    }

}

thinkphp3.2里面引用

上面代码保存文件名clientUtil.php,路径\ThinkPHP\Library\Vendor\clientUtil\clientUtil.php

在自定义函数中引用\Apps\Common\Common\function.php

<?php
include VENDOR_PATH."clientUtil/clientUtil.php";
// import("Vendor.clientUtil.clientUtil"); // 文件名必须保存成clientUtil.class.php
/**
 * 获取客户端游览器
 * @param $userAgent $_SERVER['HTTP_USER_AGENT']
 * @param bool $isReTurnVersion //是否一起返回版本号
 * @return string (类型 + 版本号)
 * @author 2016-01-23
 */
function getBrowser($userAgent,$isReTurnVersion = false){
	
	$c = new clientUtil;
	$resp = $c->getBrowser($userAgent,$isReTurnVersion);
	return $resp;	
}
/**
 * 获取客户端操作系统
 * @param $userAgent
 * @param bool $isReTurnVersion //是否一起返回版本号
 * @return string
 * @author 2016-01-23
 */
function getPlatForm($userAgent,$isReTurnVersion = false) {
	// include VENDOR_PATH."clientUtil/clientUtil.php";
	$c = new clientUtil;
	$resp = $c->getPlatForm($userAgent,$isReTurnVersion);
	return $resp;
}

版权声明:本篇文章来源于网络。 来源链接

相关推荐
php实现ZIP压缩文件解压缩,中文乱码解决方法(重要)
PHP | 2019-04-30 5640
直接上代码,具体代码里面都有注释。直接中文压缩文件解压到中文文件夹。 <?php // 需开启配置 php_zip.dll // phpinfo(); header("Content-type:text/html;charset=utf-8"); /* * $filename 被解压文件名 * $path 解压...
openssl_private_decrypt解密失败
PHP | 2019-01-16 5608
复制别人的解密程序,原程序可以解密,复制过来就不可以 一步步尝试发现,秘钥换行符有区别, 原秘钥有换行符,复制过来不知道什么时候把换行符清空了,成了一行字符串了。
评论:0条
评论加载中...
发表评论