ji1043
V2EX  ›  问与答

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

  •  
  •   ji1043 · Apr 12, 2015 · 4290 views
    This topic created in 4229 days ago, the information mentioned may be changed or developed.

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

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

    去看看
    raincious
    raincious
    Apr 12, 2015 via Android
    6
    @ji1043

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

    如果你想让网页在用户禁用了各种功能的前提下正常工作,这也太难了。比如如果用户禁止了图片加载,那最好就听天由命了,别想着用CSS画一个出来 :)
    laoyuan
    laoyuan
    Apr 12, 2015
    7
    @ETiV 现在也有x86的手机,不过可以忽略了,不知道以后会不会扩大份额
    Septembers
    Septembers
    Apr 12, 2015 via Android
    8
    @raincious 还有一个问题 主动禁用JavaScript的用户也想必非常注意安全
    LeopardDennis
    LeopardDennis
    Apr 12, 2015
    10
    mobiledetect + 1
    superliang
    superliang
    Apr 12, 2015
    11
    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
    ETiV
    Apr 12, 2015 via iPhone
    12
    禁了JS貌似广告都显示不出来了……

    这不是重点,N多网站也会出问题……
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   957 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 59ms · UTC 22:22 · PVG 06:22 · LAX 14:22 · JFK 17:22
    ♥ Do have faith in what you're doing.