首页 文章

PHP只检查操作系统

提问于
浏览
-2

我正在使用以下php代码来显示操作系统版本:

<?php

 $user_agent     =   $_SERVER['HTTP_USER_AGENT'];

 function getOS() { 

global $user_agent;

$os_platform    =   "Unknown OS Platform";

$os_array       =   array(
                        '/windows nt 6.2/i'     =>  'Windows 8',
                        '/windows nt 6.1/i'     =>  'Windows 7',
                        '/windows nt 6.0/i'     =>  'Windows Vista',
                        '/windows nt 5.2/i'     =>  'Windows Server 2003/XP     x64',
                        '/windows nt 5.1/i'     =>  'Windows XP',
                        '/windows xp/i'         =>  'Windows XP',
                        '/windows nt 5.0/i'     =>  'Windows 2000',
                        '/windows me/i'         =>  'Windows ME',
                        '/win98/i'              =>  'Windows 98',
                        '/win95/i'              =>  'Windows 95',
                        '/win16/i'              =>  'Windows 3.11',
                        '/macintosh|mac os x/i' =>  'Mac OS X',
                        '/mac_powerpc/i'        =>  'Mac OS 9',
                        '/linux/i'              =>  'Linux',
                        '/ubuntu/i'             =>  'Ubuntu',
                        '/iphone/i'             =>  'iPhone',
                        '/ipod/i'               =>  'iPod',
                        '/ipad/i'               =>  'iPad',
                        '/android/i'            =>  'Android',
                        '/blackberry/i'         =>  'BlackBerry',
                        '/webos/i'              =>  'Mobile'
                    );

     foreach ($os_array as $regex => $value) { 

    if (preg_match($regex, $user_agent)) {
        $os_platform    =   $value;
    }

    }   

      return $os_platform;

       }

 function getBrowser() {

global $user_agent;

$browser        =   "Unknown Browser";

$browser_array  =   array(
                        '/msie/i'       =>  'Internet Explorer',
                        '/firefox/i'    =>  'Firefox',
                        '/safari/i'     =>  'Safari',
                        '/chrome/i'     =>  'Chrome',
                        '/opera/i'      =>  'Opera',
                        '/netscape/i'   =>  'Netscape',
                        '/maxthon/i'    =>  'Maxthon',
                        '/konqueror/i'  =>  'Konqueror',
                        '/mobile/i'     =>  'Handheld Browser'
                    );

   foreach ($browser_array as $regex => $value) { 

    if (preg_match($regex, $user_agent)) {
        $browser    =   $value;
    }

}

 return $browser;

  }


 $user_os        =   getOS();
 $user_browser   =   getBrowser();

  $device_details =   "<strong>Browser: </strong>".$user_browser."
<strong>Operating System: </strong>".$user_os.""; print_r($device_details); echo("


".$_SERVER['HTTP_USER_AGENT'].""); ?>

这给了我以下结果:

浏览器:未知浏览器操作系统:未知的操作系统平台

Mozilla / 5.0(Windows NT 10.0; WOW64)AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 45.0.2454.85 Safari / 537.36

我正在运行Windows 10,它似乎不起作用 .

我想要显示的是以下内容:

此PC正在运行Windows 10

那可能吗?

2 回答

  • 0

    您的 $os_array 不会't have any data for Windows 10 (which I' m假设可以映射到Windows NT 10.0 .

    所以,只需将 $os_array 更改为:

    $os_array       =   array(
                        '/windows nt 10.0/i'    =>  'Windows 10',
                        '/windows nt 6.2/i'     =>  'Windows 8',
                        '/windows nt 6.1/i'     =>  'Windows 7',
                        '/windows nt 6.0/i'     =>  'Windows Vista',
                        '/windows nt 5.2/i'     =>  'Windows Server 2003/XP     x64',
                        '/windows nt 5.1/i'     =>  'Windows XP',
                        '/windows xp/i'         =>  'Windows XP',
                        '/windows nt 5.0/i'     =>  'Windows 2000',
                        '/windows me/i'         =>  'Windows ME',
                        '/win98/i'              =>  'Windows 98',
                        '/win95/i'              =>  'Windows 95',
                        '/win16/i'              =>  'Windows 3.11',
                        '/macintosh|mac os x/i' =>  'Mac OS X',
                        '/mac_powerpc/i'        =>  'Mac OS 9',
                        '/linux/i'              =>  'Linux',
                        '/ubuntu/i'             =>  'Ubuntu',
                        '/iphone/i'             =>  'iPhone',
                        '/ipod/i'               =>  'iPod',
                        '/ipad/i'               =>  'iPad',
                        '/android/i'            =>  'Android',
                        '/blackberry/i'         =>  'BlackBerry',
                        '/webos/i'              =>  'Mobile'
                    );
    

    替代解决方案

    这几乎与你的代码相同 - 只是提供了一个替代方案,但实际上没有理由为什么这会起作用,但之前没有 .

    <?php
    
    function getOS($userAgent) {
    
    $osPlatform    =   "Unknown OS Platform";
    
    $os_array       =   array(
        'windows nt 10.0'    => 'Windows 10',
        'windows nt 6.2'     =>  'Windows 8',
        'windows nt 6.1'     =>  'Windows 7',
        'windows nt 6.0'     =>  'Windows Vista',
        'windows nt 5.2'     =>  'Windows Server 2003/XP x64',
        'windows nt 5.1'     =>  'Windows XP',
        'windows xp'         =>  'Windows XP',
        'windows nt 5.0'     =>  'Windows 2000',
        'windows me'         =>  'Windows ME',
        'win98'              =>  'Windows 98',
        'win95'              =>  'Windows 95',
        'win16'              =>  'Windows 3.11',
        'macintosh|mac os x' =>  'Mac OS X',
        'mac_powerpc'        =>  'Mac OS 9',
        'linux'              =>  'Linux',
        'ubuntu'             =>  'Ubuntu',
        'phone'             =>  'iPhone',
        'pod'               =>  'iPod',
        'pad'               =>  'iPad',
        'android'            =>  'Android',
        'blackberry'         =>  'BlackBerry',
        'webos'              =>  'Mobile'
    );
    
    foreach ($os_array as $label => $value) {
        if (stripos($userAgent, $label)) {
            return $value;
        }
    }
    
    return $osPlatform;
    
    }
    
    function getBrowser($userAgent) {
    
    $browser        =   "Unknown Browser";
    
    $browser_array  =   array(
        'msie'       =>  'Internet Explorer',
        'firefox'    =>  'Firefox',
        'safari'     =>  'Safari',
        'chrome'     =>  'Chrome',
        'opera'      =>  'Opera',
        'netscape'   =>  'Netscape',
        'maxthon'    =>  'Maxthon',
        'konqueror'  =>  'Konqueror',
        'mobile'     =>  'Handheld Browser'
    );
    
    foreach ($browser_array as $label => $value) {
        if (stripos($userAgent, $label)) {
            return $value;
        }
    }
    
    return $browser;
    
    }
    
    $userAgent     =   $_SERVER['HTTP_USER_AGENT'];
    //$userAgent = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36      (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36';
    
    
    $user_os        =   getOS($userAgent);
    $user_browser   =   getBrowser($userAgent);
    
    $device_details =   "<strong>Browser: </strong>".$user_browser."
    <strong>Operating System: </strong>".$user_os.""; print_r($device_details); //echo("


    ".$_SERVER['HTTP_USER_AGENT']."");
  • 0

    只需在您的阵列中添加Windows 10:

    $os_array = array(
        '/windows nt 10.0/i'    =>  'Windows 10',
        '/windows nt 6.2/i'     =>  'Windows 8',
        '/windows nt 6.1/i'     =>  'Windows 7',
        '/windows nt 6.0/i'     =>  'Windows Vista',
        '/windows nt 5.2/i'     =>  'Windows Server 2003/XP     x64',
        '/windows nt 5.1/i'     =>  'Windows XP',
        '/windows xp/i'         =>  'Windows XP',
        '/windows nt 5.0/i'     =>  'Windows 2000',
        '/windows me/i'         =>  'Windows ME',
        '/win98/i'              =>  'Windows 98',
        '/win95/i'              =>  'Windows 95',
        '/win16/i'              =>  'Windows 3.11',
        '/macintosh|mac os x/i' =>  'Mac OS X',
        '/mac_powerpc/i'        =>  'Mac OS 9',
        '/linux/i'              =>  'Linux',
        '/ubuntu/i'             =>  'Ubuntu',
        '/iphone/i'             =>  'iPhone',
        '/ipod/i'               =>  'iPod',
        '/ipad/i'               =>  'iPad',
        '/android/i'            =>  'Android',
        '/blackberry/i'         =>  'BlackBerry',
        '/webos/i'              =>  'Mobile'
    );
    

    this fiddle . ideone没有回显任何用户代理,所以我不得不硬编码,但如果你的用户代理存在,这应该工作 .

相关问题