PHP只检查操作系统

I'm using the follow php code to display operating system version:

<?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."<br />                <strong>Operating System: </strong>".$user_os."";

 print_r($device_details);

echo("<br /><br /><br />".$_SERVER['HTTP_USER_AGENT']."");

  ?>

which give me the following result:

Browser: Unknown Browser Operating System: Unknown OS Platform

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

I'm running Windows 10 and it doesnt appear to work.

All I want to display is the following:

This PC is running Windows 10

is that possible?

Your $os_array doesn't have any data for Windows 10 (which I'm assuming can be mapped to Windows NT 10.0.

So, simply change $os_array to:

$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'
                );

Alternative solution

This is pretty much the same code as yours - just providing an alternative but there's really no reason why this would work but the previous didn't.

<?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."<br />                    <strong>Operating System: </strong>".$user_os."";

print_r($device_details);

//echo("<br /><br /><br />".$_SERVER['HTTP_USER_AGENT']."");

Just add Windows 10 in your 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'
);

See this fiddle. ideone is not echoing any user agent, so I had to hardcode one, but if your user agent is present, this should work.

我只要Windows95和Windows10!呜呜!winwin!