• 技术文章 >后端开发 >PHP问题

    php怎么判断客户端是pc还是移动设备

    VV2021-02-20 14:25:21原创100

    php判断客户端是pc还是移动设备的方法:根据php的$_SERVER['HTTP_USER_AGENT']中的各种浏览器访问时所包含各个浏览器特定的字符串来判断是属于PC还是移动端。

    本文操作环境:windows10系统、php 7.3、thinkpad t480电脑。

    具体方法如下:

    方法一:

    /**
    * 
    * 根据php的$_SERVER['HTTP_USER_AGENT'] 中各种浏览器访问时所包含各个浏览器特定的字符串来判断是属于PC还是移动端
    */
    function checkmobile() {
    global $_G;
    $mobile = array();
    //各个触控浏览器中$_SERVER['HTTP_USER_AGENT']所包含的字符串数组
    static $touchbrowser_list =array('iphone', 'android', 'phone', 'mobile', 'wap', 'netfront', 'java', 'opera mobi', 'opera mini',
        'ucweb', 'windows ce', 'symbian', 'series', 'webos', 'sony', 'blackberry', 'dopod', 'nokia', 'samsung',
        'palmsource', 'xda', 'pieplus', 'meizu', 'midp', 'cldc', 'motorola', 'foma', 'docomo', 'up.browser',
        'up.link', 'blazer', 'helio', 'hosin', 'huawei', 'novarra', 'coolpad', 'webos', 'techfaith', 'palmsource',
        'alcatel', 'amoi', 'ktouch', 'nexian', 'ericsson', 'philips', 'sagem', 'wellcom', 'bunjalloo', 'maui', 'smartphone',
        'iemobile', 'spice', 'bird', 'zte-', 'longcos', 'pantech', 'gionee', 'portalmmm', 'jig browser', 'hiptop',
        'benq', 'haier', '^lct', '320x320', '240x320', '176x220');
    //window手机浏览器数组【猜的】
    static $mobilebrowser_list =array('windows phone');
    //wap浏览器中$_SERVER['HTTP_USER_AGENT']所包含的字符串数组
    static $wmlbrowser_list = array('cect', 'compal', 'ctl', 'lg', 'nec', 'tcl', 'alcatel', 'ericsson', 'bird', 'daxian', 'dbtel', 'eastcom',
       'pantech', 'dopod', 'philips', 'haier', 'konka', 'kejian', 'lenovo', 'benq', 'mot', 'soutec', 'nokia', 'sagem', 'sgh',
       'sed', 'capitel', 'panasonic', 'sonyericsson', 'sharp', 'amoi', 'panda', 'zte');
    $pad_list = array('pad', 'gt-p1000');
    $useragent = strtolower($_SERVER['HTTP_USER_AGENT']);
    if(dstrpos($useragent, $pad_list)) {
      return false;
    }
    if(($v = dstrpos($useragent, $mobilebrowser_list, true))){
      $_G['mobile'] = $v;
      return '1';
    }
    if(($v = dstrpos($useragent, $touchbrowser_list, true))){
      $_G['mobile'] = $v;
      return '2';
    }
    if(($v = dstrpos($useragent, $wmlbrowser_list))) {
      $_G['mobile'] = $v;
      return '3'; //wml版
    }
    $brower = array('mozilla', 'chrome', 'safari', 'opera', 'm3gate', 'winwap', 'openwave', 'myop');
    if(dstrpos($useragent, $brower)) return false;
    $_G['mobile'] = 'unknown';
    //对于未知类型的浏览器,通过$_GET['mobile']参数来决定是否是手机浏览器
    if(isset($_G['mobiletpl'][$_GET['mobile']])) {
      return true;
    } else {
      return false;
    }
    }
    /**
    * 判断$arr中元素字符串是否有出现在$string中
    * @param  $string     $_SERVER['HTTP_USER_AGENT'] 
    * @param  $arr          各中浏览器$_SERVER['HTTP_USER_AGENT']中必定会包含的字符串
    * @param  $returnvalue 返回浏览器名称还是返回布尔值,true为返回浏览器名称,false为返回布尔值【默认】
    * @author           discuz3x
    * @lastmodify    2014-04-09
    */
    function dstrpos($string, $arr, $returnvalue = false) {
    if(empty($string)) return false;
    foreach((array)$arr as $v) {
      if(strpos($string, $v) !== false) {
       $return = $returnvalue ? $v : true;
       return $return;
      }
    }
    return false;
    }

    (学习视频分享:php视频教程

    方法二:

    <?php
    function isMobile()
    { 
        // 如果有HTTP_X_WAP_PROFILE则一定是移动设备
        if (isset ($_SERVER['HTTP_X_WAP_PROFILE']))
        {
            return true;
        } 
        // 如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
        if (isset ($_SERVER['HTTP_VIA']))
        { 
            // 找不到为flase,否则为true
            return stristr($_SERVER['HTTP_VIA'], "wap") ? true : false;
        } 
        // 脑残法,判断手机发送的客户端标志,兼容性有待提高
        if (isset ($_SERVER['HTTP_USER_AGENT']))
        {
            $clientkeywords = array ('nokia',
                'sony',
                'ericsson',
                'mot',
                'samsung',
                'htc',
                'sgh',
                'lg',
                'sharp',
                'sie-',
                'philips',
                'panasonic',
                'alcatel',
                'lenovo',
                'iphone',
                'ipod',
                'blackberry',
                'meizu',
                'android',
                'netfront',
                'symbian',
                'ucweb',
                'windowsce',
                'palm',
                'operamini',
                'operamobi',
                'openwave',
                'nexusone',
                'cldc',
                'midp',
                'wap',
                'mobile'
                ); 
            // 从HTTP_USER_AGENT中查找手机浏览器的关键字
            if (preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT'])))
            {
                return true;
            } 
        } 
        // 协议法,因为有可能不准确,放到最后判断
        if (isset ($_SERVER['HTTP_ACCEPT']))
        { 
            // 如果只支持wml并且不支持html那一定是移动设备
            // 如果支持wml和html但是wml在html之前则是移动设备
            if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false) && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'], 'text/html'))))
            {
                return true;
            } 
        } 
        return false;
    } 
    ?>

    第一种方法亲测可用

    调用函数:

    if(!checkmobile())
    
    {}
    
    else{}

    如果为手机,则。。。否则。

    相关推荐:php教程

    以上就是php怎么判断客户端是pc还是移动设备的详细内容,更多请关注php中文网其它相关文章!

    本文原创发布php中文网,转载请注明出处,感谢您的尊重!
    专题推荐:php 客户端 pc 移动设备
    上一篇:php怎么关闭魔术引号 下一篇:php如何根据日期计算星期几
    第15期线上培训班

    相关文章推荐

    • php 判断来访客户端是否移动设备• php判断手机等移动设备的方法• viewport在移动设备上的兼容性介绍• php判断是否为移动设备

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网