PHP判断客户端是否为移动终端

当需要对pc与无线作为一个分支的时候,难免需要对pc与移动终端进行区分,这时候就需要获取客户端访问服务端时,浏览器的头信息所传递的参数进行过滤分类了。

下面这个函数可直接对所有的移动终端进行获取。
返回的结果如果为true则是移动终端,false为pc端。

code:

/**
 * 获取客户端是否为移动终端  
 * 是true or 否false
 * @return boolean
 * @author hkshadow
 */
function is_mobile_request() {
    $_SERVER ['ALL_HTTP'] = isset ( $_SERVER ['ALL_HTTP'] ) ? $_SERVER ['ALL_HTTP'] : '';
    $mobile_browser = '0';
    if (preg_match ( '/(up.browser|up.link|mmp|symbian|smartphone|midp|wap|phone|iphone|ipad|ipod|android|xoom)/i', strtolower ( $_SERVER ['HTTP_USER_AGENT'] ) )){
        $mobile_browser ++;   
    }
    if ((isset ( $_SERVER ['HTTP_ACCEPT'] )) and (strpos ( strtolower ( $_SERVER ['HTTP_ACCEPT'] ), 'application/vnd.wap.xhtml+xml' ) !== false)){
        $mobile_browser ++;
    }
    if (isset ( $_SERVER ['HTTP_X_WAP_PROFILE'] )){
        $mobile_browser ++;
    }
    if (isset ( $_SERVER ['HTTP_PROFILE'] )){
        $mobile_browser ++;
    }

    $mobile_ua = strtolower ( substr ( $_SERVER ['HTTP_USER_AGENT'], 0, 4 ) );
    $mobile_agents = array ('w3c ', 'acs-', 'alav', 'alca', 'amoi', 'audi', 'avan', 'benq', 'bird', 'blac', 'blaz', 'brew', 'cell', 'cldc', 'cmd-', 'dang', 'doco', 'eric', 'hipt', 'inno', 'ipaq', 'java', 'jigs', 'kddi', 'keji', 'leno', 'lg-c', 'lg-d', 'lg-g', 'lge-', 'maui', 'maxo', 'midp', 'mits', 'mmef', 'mobi', 'mot-', 'moto', 'mwbp', 'nec-', 'newt', 'noki', 'oper', 'palm', 'pana', 'pant', 'phil', 'play', 'port', 'prox', 'qwap', 'sage', 'sams', 'sany', 'sch-', 'sec-', 'send', 'seri', 'sgh-', 'shar', 'sie-', 'siem', 'smal', 'smar', 'sony', 'sph-', 'symb', 't-mo', 'teli', 'tim-', 'tosh', 'tsm-', 'upg1', 'upsi', 'vk-v', 'voda', 'wap-', 'wapa', 'wapi', 'wapp', 'wapr', 'webc', 'winw', 'winw', 'xda', 'xda-' );
    if (in_array ( $mobile_ua, $mobile_agents )){
        $mobile_browser ++;
    }
    if (strpos ( strtolower ( $_SERVER ['ALL_HTTP'] ), 'operamini' ) !== false){
        $mobile_browser ++;
    }
    // 如果用户是在Windows,则直接设置为false
    if (strpos ( strtolower ( $_SERVER ['HTTP_USER_AGENT'] ), 'windows' ) !== false){
        $mobile_browser = 0;
    }
    // 如果是wp7永无,也是一样,将其设置为false,因为wp7也是windows
    if (strpos ( strtolower ( $_SERVER ['HTTP_USER_AGENT'] ), 'windows phone' ) !== false){
        $mobile_browser ++;
    }
    if ($mobile_browser > 0){
        return true;
    }else{
        return false;   
    }
}