使用基于ThinkPHP3.2.3的ThinkAdmin创建手机电脑通用的表白墙(二)自动判断设备以显示不同界面

访问项目默认定位Home模块,所以可以通过在Home控制器中判断设备来重定向URL

这个方法来自于网络,不使用来牟利,侵删

修改Application\Home\Controller\IndexController.class.php

<?php

namespace Home\Controller;
use Think\Controller;

class IndexController extends Controller{

    public function index(){
    	// 首页               
    	if ($this->isMobile()) {                       
    		$this->redirect('/Mobile/');//使手机重定向到Mobile模块        
    	}else {                        
    		$this->display();        
    	}           
     

       
    }


     function isMobile(){
	    // 如果有HTTP_X_WAP_PROFILE则一定是移动设备
	    if (isset ($_SERVER['HTTP_X_WAP_PROFILE']))
	        return true;
	 
	    //此条摘自TPM智能切换模板引擎,适合TPM开发
	    if(isset ($_SERVER['HTTP_CLIENT']) &&'PhoneClient'==$_SERVER['HTTP_CLIENT'])
	        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;
		}
    

}
之后就能根据设备自动显示不同的模块了

你可能感兴趣的:(thinkphp)