V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
ji1043
V2EX  ›  问与答

求一个 用 PHP 判断 是否 移动端与 桌面端 正确率较高的方法?

  •  
  •   ji1043 · 2015-04-12 09:29:27 +08:00 · 3362 次点击
    这是一个创建于 3548 天前的主题,其中的信息可能已经有所发展或是发生改变。

    使用场景为 分配不同的广告所需要,百度了下 方法有很多,但不知道哪个更加准确。

    13 条回复    2015-04-12 21:09:55 +08:00
    daijia1123
        1
    daijia1123  
       2015-04-12 09:37:04 +08:00   ❤️ 2
    ETiV
        2
    ETiV  
       2015-04-12 09:52:43 +08:00 via iPhone
    放到前端用JS做,navigator里有个platform还是arch之类的,能返回CPU是不是arm。
    likang
        3
    likang  
       2015-04-12 10:26:28 +08:00   ❤️ 1
    ji1043
        4
    ji1043  
    OP
       2015-04-12 10:43:44 +08:00
    @ETiV js的话 手机禁用 js 那不就残废了····
    ji1043
        5
    ji1043  
    OP
       2015-04-12 10:44:33 +08:00
    @likang
    @daijia1123

    去看看
    raincious
        6
    raincious  
       2015-04-12 11:39:01 +08:00 via Android
    @ji1043

    你可以做个页面给禁用了JavaScript的人一个提示,比如用noscript,提示让他们开启JavaScript。

    如果你想让网页在用户禁用了各种功能的前提下正常工作,这也太难了。比如如果用户禁止了图片加载,那最好就听天由命了,别想着用CSS画一个出来 :)
    laoyuan
        7
    laoyuan  
       2015-04-12 11:58:20 +08:00
    @ETiV 现在也有x86的手机,不过可以忽略了,不知道以后会不会扩大份额
    Septembers
        8
    Septembers  
       2015-04-12 12:40:59 +08:00 via Android
    @raincious 还有一个问题 主动禁用JavaScript的用户也想必非常注意安全
    aisin
        9
    aisin  
       2015-04-12 13:25:18 +08:00
    LeopardDennis
        10
    LeopardDennis  
       2015-04-12 16:44:08 +08:00
    mobiledetect + 1
    myleon
        11
    myleon  
       2015-04-12 18:46:22 +08:00
    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;
    }
    if (ismobile()){echo "手机!";}
    ETiV
        12
    ETiV  
       2015-04-12 19:02:47 +08:00 via iPhone
    禁了JS貌似广告都显示不出来了……

    这不是重点,N多网站也会出问题……
    mudone
        13
    mudone  
       2015-04-12 21:09:55 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2807 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 03:20 · PVG 11:20 · LAX 19:20 · JFK 22:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.