用 PHP 怎么获取用户 Windows 的内核版本号 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
0x1e240
V2EX    Windows

用 PHP 怎么获取用户 Windows 的内核版本号

  •  
  •   0x1e240 2015 年 2 月 22 日 4796 次点击
    这是一个创建于 3990 天前的主题,其中的信息可能已经有所发展或是发生改变。
    USER_AGENT: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0 

    想通过 USER AGENT 判断用户的操作系统类型,如果是 Windows 获取其中的内核版本号。比如上面的一个 USER AGENT,现在要把 Windows NT 6.3 中的内核版本 6.3 取出给一个变量要如何写?

    不会 PHP,希望能够得到详细的指点。

    24 条回复    2015-02-26 19:40:19 +08:00
    sb
        1
    sb  
       2015 年 2 月 22 日 via Android   1
    正则表达式取括号内的内容 把结果以;分割
    0x1e240
        2
    0x1e240  
    OP
       2015 年 2 月 22 日
    @sb 这样怎么取到 6.3?求指教
    oott123
        3
    oott123  
       2015 年 2 月 22 日 via Android
    /Windows NT ([0-9.])+;/
    0x1e240
        4
    0x1e240  
    OP
       2015 年 2 月 22 日
    @oott123 能不能详细一点,这个看不懂
    oott123
        5
    oott123  
       2015 年 2 月 22 日 via Android   2
    请自给自足。
    这是一个正则表达式,你可能需要用到 preg_match 。
    我手头没有手册,记不住这个函数定义,请自己到 php.net 上查一下。
    huijiewei
        6
    huijiewei  
       2015 年 2 月 22 日   1
    MinonHeart
        7
    MinonHeart  
       2015 年 2 月 22 日   1
    @oott123
    <?php
    //mytest
    $agent = 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36';
    preg_match('/Windows NT ([0-9.])+;/', $agent, $full);
    preg_match('/([0-9.])+/', $full[0], $lite);
    $version = $lite[0];
    echo $version;
    ?>
    我这样写能够取得 6.3,不知道有没有什么问题
    0x1e240
        8
    0x1e240  
    OP
       2015 年 2 月 22 日
    @huijiewei 不需要那么复杂的
    oott123
        9
    oott123  
       2015 年 2 月 22 日 via Android
    @MinonHeart 呃,$full[1] 不就有了…
    MinonHeart
        10
    MinonHeart  
       2015 年 2 月 22 日
    @oott123 $full[1]是 3 不是 6.3
    MinonHeart
        11
    MinonHeart  
       2015 年 2 月 22 日   1
    @oott123 preg_match('/Windows NT ([0-9.]+);/', $agent, $full);
    这样写 $full[1] 就有了,写错不要打我
    msxcms
        12
    msxcms  
       2015 年 2 月 22 日
    不会正则就explode或者strstr吧
    ven
        13
    ven  
       2015 年 2 月 22 日
    这样干的话,还要考虑其他系统的时候怎么显示噢。
    oott123
        14
    oott123  
       2015 年 2 月 22 日
    @MinonHeart 233 括号打错位置了,你写的是对的。
    codegear
        15
    codegear  
       2015 年 2 月 22 日
    @oott123
    @MinonHeart
    伸出手就有糖吃,真好!!
    loading
        16
    loading  
       2015 年 2 月 22 日
    建议使用 @huijiewei 回复的,ua识别实在没必要自己造轮子了。
    icanfork
        17
    icanfork  
       2015 年 2 月 22 日
    @codegear 现在的网友真热心
    0x1e240
        18
    0x1e240  
    OP
       2015 年 2 月 22 日 via Android
    @ven
    @loading
    只要Win的版本号,不是Win直接else
    MaiCong
        19
    MaiCong  
       2015 年 2 月 22 日
    建议楼主善用搜索,很多问题搜一下就解决了。如果在这里等别人回复,自己得到了答案,可是过程是什么你知道吗。
    jimmy66
        20
    jimmy66  
       2015 年 2 月 23 日
    这和会不会PHP关系不大,你应该学下正则表达式。花点时间你不会后悔的
    lm902
        21
    lm902  
       2015 年 2 月 23 日
    @oott123 Windows NT 10.0 的UA路过
    oott123
        22
    oott123  
       2015 年 2 月 23 日 via Android
    @lm902 10.0 用这个正则无法匹配吗?
    jimmy66
        23
    jimmy66  
       2015 年 2 月 26 日
    @MinonHeart 其实我想问下为什么这种写法$full[1]匹配的都是最后一个数字,能做到 ([0-9.])+ 一个个对应匹配吗? 比如 6->1 . ->2 3->3
    MinonHeart
        24
    MinonHeart  
       2015 年 2 月 26 日   1
    @jimmy66
    <?php
    //mytest
    $agent = 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36';
    preg_match('/Windows NT ([0-9.]+);/', $agent, $version);
    echo $version[1][0] . "<br>";
    echo $version[1][1] . "<br>";
    echo $version[1][2] . "<br>";
    //可以加个判断 $version[1] 的长度进行循环输出
    //也考虑到 Windows NT 10.0 这种内核版本号的长度不定
    ?>
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2779 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 08:58 PVG 16:58 LAX 00:58 JFK 03:58
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86