V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
0x1e240
V2EX  ›  Windows

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

  •  
  •   0x1e240 · 2015-02-22 14:16:55 +08:00 · 4163 次点击
    这是一个创建于 3568 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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-02-22 15:01:08 +08:00 via Android   ❤️ 1
    正则表达式取括号内的内容 把结果以;分割
    0x1e240
        2
    0x1e240  
    OP
       2015-02-22 15:03:01 +08:00
    @sb 这样怎么取到 6.3?求指教
    oott123
        3
    oott123  
       2015-02-22 15:05:24 +08:00 via Android
    /Windows NT ([0-9.])+;/
    0x1e240
        4
    0x1e240  
    OP
       2015-02-22 15:09:15 +08:00
    @oott123 能不能详细一点,这个看不懂
    oott123
        5
    oott123  
       2015-02-22 15:12:05 +08:00 via Android   ❤️ 2
    请自给自足。
    这是一个正则表达式,你可能需要用到 preg_match 。
    我手头没有手册,记不住这个函数定义,请自己到 php.net 上查一下。
    huijiewei
        6
    huijiewei  
       2015-02-22 15:24:22 +08:00   ❤️ 1
    MinonHeart
        7
    MinonHeart  
       2015-02-22 15:31:48 +08:00   ❤️ 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-02-22 15:34:09 +08:00
    @huijiewei 不需要那么复杂的
    oott123
        9
    oott123  
       2015-02-22 15:45:33 +08:00 via Android
    @MinonHeart 呃,$full[1] 不就有了…
    MinonHeart
        10
    MinonHeart  
       2015-02-22 15:54:43 +08:00
    @oott123 $full[1]是 3 不是 6.3
    MinonHeart
        11
    MinonHeart  
       2015-02-22 15:56:09 +08:00   ❤️ 1
    @oott123 preg_match('/Windows NT ([0-9.]+);/', $agent, $full);
    这样写 $full[1] 就有了,写错不要打我
    msxcms
        12
    msxcms  
       2015-02-22 16:40:28 +08:00
    不会正则就explode或者strstr吧
    ven
        13
    ven  
       2015-02-22 17:23:11 +08:00
    这样干的话,还要考虑其他系统的时候怎么显示噢。
    oott123
        14
    oott123  
       2015-02-22 18:32:24 +08:00
    @MinonHeart 233 括号打错位置了,你写的是对的。
    codegear
        15
    codegear  
       2015-02-22 19:59:25 +08:00
    @oott123
    @MinonHeart
    伸出手就有糖吃,真好!!
    loading
        16
    loading  
       2015-02-22 20:01:35 +08:00
    建议使用 @huijiewei 回复的,ua识别实在没必要自己造轮子了。
    belin520
        17
    belin520  
       2015-02-22 20:08:24 +08:00
    @codegear 现在的网友真热心
    0x1e240
        18
    0x1e240  
    OP
       2015-02-22 22:43:35 +08:00 via Android
    @ven
    @loading
    只要Win的版本号,不是Win直接else
    MaiCong
        19
    MaiCong  
       2015-02-22 23:59:51 +08:00
    建议楼主善用搜索,很多问题搜一下就解决了。如果在这里等别人回复,自己得到了答案,可是过程是什么你知道吗。
    jimmy66
        20
    jimmy66  
       2015-02-23 00:10:18 +08:00
    这和会不会PHP关系不大,你应该学下正则表达式。花点时间你不会后悔的
    lm902
        21
    lm902  
       2015-02-23 01:10:24 +08:00
    @oott123 Windows NT 10.0 的UA路过
    oott123
        22
    oott123  
       2015-02-23 09:41:39 +08:00 via Android
    @lm902 10.0 用这个正则无法匹配吗?
    jimmy66
        23
    jimmy66  
       2015-02-26 16:51:55 +08:00
    @MinonHeart 其实我想问下为什么这种写法$full[1]匹配的都是最后一个数字,能做到 ([0-9.])+ 一个个对应匹配吗? 比如 6->1 . ->2 3->3
    MinonHeart
        24
    MinonHeart  
       2015-02-26 19:40:19 +08:00   ❤️ 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   ·   实用小工具   ·   1022 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 23:01 · PVG 07:01 · LAX 15:01 · JFK 18:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.