Определите, является ли операционная система Mac

Недавно я делал много Googling, чтобы попытаться найти простой, простой скрипт php, который определит, находится ли пользователь на Mac или нет.

Я хочу использовать это, чтобы сообщить пользователям, если ярлык на клавиатуре я им говорю, это «контроль» или «команда». Мне не нужно знать браузер или что-то еще, только если компьютер Mac.

Вот краткое описание того, что я прошу, возможно:

if (operating_system == Mac) { echo "command"; } else { echo "control"; } 

Создать страницу: identifier.php

 <?php $user_agent = getenv("HTTP_USER_AGENT"); if(strpos($user_agent, "Win") !== FALSE) $os = "Windows"; elseif(strpos($user_agent, "Mac") !== FALSE) $os = "Mac"; ?> 

затем включите его в заголовок вашего сайта.

После этого вы можете использовать его следующим образом:

 <?php if($os === "Windows") { } elseif($os === "Mac") { } ?> 

Редактировать:

Для телефона Windows:

 if (strpos(strtolower($_SERVER['HTTP_USER_AGENT']), 'windows phone os') > 0) { $mobile_browser = 1; } 
  <?php function getBrowserOS() { $user_agent = $_SERVER['HTTP_USER_AGENT']; $browser = "Unknown Browser"; $os_platform = "Unknown OS Platform"; // Get the Operating System Platform if (preg_match('/windows|win32/i', $user_agent)) { $os_platform = 'Windows'; if (preg_match('/windows nt 6.2/i', $user_agent)) { $os_platform .= " 8"; } else if (preg_match('/windows nt 6.1/i', $user_agent)) { $os_platform .= " 7"; } else if (preg_match('/windows nt 6.0/i', $user_agent)) { $os_platform .= " Vista"; } else if (preg_match('/windows nt 5.2/i', $user_agent)) { $os_platform .= " Server 2003/XP x64"; } else if (preg_match('/windows nt 5.1/i', $user_agent) || preg_match('/windows xp/i', $user_agent)) { $os_platform .= " XP"; } else if (preg_match('/windows nt 5.0/i', $user_agent)) { $os_platform .= " 2000"; } else if (preg_match('/windows me/i', $user_agent)) { $os_platform .= " ME"; } else if (preg_match('/win98/i', $user_agent)) { $os_platform .= " 98"; } else if (preg_match('/win95/i', $user_agent)) { $os_platform .= " 95"; } else if (preg_match('/win16/i', $user_agent)) { $os_platform .= " 3.11"; } } else if (preg_match('/macintosh|mac os x/i', $user_agent)) { $os_platform = 'Mac'; if (preg_match('/macintosh/i', $user_agent)) { $os_platform .= " OS X"; } else if (preg_match('/mac_powerpc/i', $user_agent)) { $os_platform .= " OS 9"; } } else if (preg_match('/linux/i', $user_agent)) { $os_platform = "Linux"; } // Override if matched if (preg_match('/iphone/i', $user_agent)) { $os_platform = "iPhone"; } else if (preg_match('/android/i', $user_agent)) { $os_platform = "Android"; } else if (preg_match('/blackberry/i', $user_agent)) { $os_platform = "BlackBerry"; } else if (preg_match('/webos/i', $user_agent)) { $os_platform = "Mobile"; } else if (preg_match('/ipod/i', $user_agent)) { $os_platform = "iPod"; } else if (preg_match('/ipad/i', $user_agent)) { $os_platform = "iPad"; } // Get the Browser if (preg_match('/msie/i', $user_agent) && !preg_match('/opera/i', $user_agent)) { $browser = "Internet Explorer"; } else if (preg_match('/firefox/i', $user_agent)) { $browser = "Firefox"; } else if (preg_match('/chrome/i', $user_agent)) { $browser = "Chrome"; } else if (preg_match('/safari/i', $user_agent)) { $browser = "Safari"; } else if (preg_match('/opera/i', $user_agent)) { $browser = "Opera"; } else if (preg_match('/netscape/i', $user_agent)) { $browser = "Netscape"; } // Override if matched if ($os_platform == "iPhone" || $os_platform == "Android" || $os_platform == "BlackBerry" || $os_platform == "Mobile" || $os_platform == "iPod" || $os_platform == "iPad") { if (preg_match('/mobile/i', $user_agent)) { $browser = "Handheld Browser"; } } // Create a Data Array return array( 'browser' => $browser, 'os_platform' => $os_platform ); } $user_agent = getBrowserOS(); $device_details = "<strong>Browser: </strong>".$user_agent['browser']."<br /><strong>Operating System: </strong>".$user_agent['os_platform'].""; print_r($device_details); echo("<br /><br /><br />".$_SERVER['HTTP_USER_AGENT'].""); ?> 
 function getUserOS(){ $osList = array ( 'Windows 7' => 'windows nt 6.1', 'Windows Vista' => 'windows nt 6.0', 'Windows Server 2003' => 'windows nt 5.2', 'Windows XP' => 'windows nt 5.1', 'Windows 2000 sp1' => 'windows nt 5.01', 'Windows 2000' => 'windows nt 5.0', 'Windows NT 4.0' => 'windows nt 4.0', 'Windows Me' => 'win 9x 4.9', 'Windows 98' => 'windows 98', 'Windows 95' => 'windows 95', 'Windows CE' => 'windows ce', 'Windows (version unknown)' => 'windows', 'OpenBSD' => 'openbsd', 'SunOS' => 'sunos', 'Ubuntu' => 'ubuntu', 'Linux' => '(linux)|(x11)', 'Mac OSX Beta (Kodiak)' => 'mac os x beta', 'Mac OSX Cheetah' => 'mac os x 10.0', 'Mac OSX Puma' => 'mac os x 10.1', 'Mac OSX Jaguar' => 'mac os x 10.2', 'Mac OSX Panther' => 'mac os x 10.3', 'Mac OSX Tiger' => 'mac os x 10.4', 'Mac OSX Leopard' => 'mac os x 10.5', 'Mac OSX Snow Leopard' => 'mac os x 10.6', 'Mac OSX Lion' => 'mac os x 10.7', 'Mac OSX (version unknown)' => 'mac os x', 'Mac OS (classic)' => '(mac_powerpc)|(macintosh)', 'QNX' => 'QNX', 'BeOS' => 'beos', 'OS2' => 'os/2', 'SearchBot'=>'(nuhk)|(googlebot)|(yammybot)|(openbot)|(slurp)|(msnbot)|(ask jeeves/teoma)|(ia_archiver)' ); $useragent = $_SERVER['HTTP_USER_AGENT']; $useragent = strtolower($useragent); foreach($osList as $os=>$match) { if (preg_match('/' . $match . '/i', $useragent)) { break; } else { //$os = "Not automatically detected.<br />$useragent"; $os = "unknown"; } } return $os; } 

Попробуйте get_browser() , встроенную в PHP.

 $browser = get_browser(null, true); echo "Platform: " . $browser["platform"] . "\n"; 

Посмотрите на http://ellislab.com/codeigniter/user-guide/libraries/user_agent.html.

В соответствии с определением точной версии ОС из браузера. Краткий ответ: точно вы не можете.

Длительный ответ:

Все, что у вас есть, это информация в заголовке HTTP-пользователя HTTP, которая обычно содержит имя и версию ОС.

Обычно браузеры, работающие на Mac OS и Linux, отправляют достаточно информации для определения точной ОС. Например, вот мой заголовок User-Agent:

Mozilla / 5.0 (X11; U; Linux x86_64; en-US; rv: 1.9.0.7) Gecko / 2009030423 Ubuntu / 8.10 (intrepid) Firefox / 3.0.7

Вы можете видеть, что я запускаю Ubuntu 8.10 Intrepid Ibex.

И вот что отчет Beta и Safari 4 Beta на моем MacBook Pro:

Mozilla / 5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv: 1.9.0.7) Gecko / 2009021906 Firefox / 3.0.7

Mozilla / 5.0 (Macintosh; U, Intel Mac OS X 10_5_6; ru-us) AppleWebKit / 528.16 (KHTML, например, Gecko) Версия / 4.0 Safari / 528.16

С другой стороны, браузеры Windows обычно сообщают только о версии ОС, а не о конкретном пакете (Pro, Business и т. Д.):

Mozilla / 5.0 (Windows; U; Windows NT 5.1; en-US; rv: xxx). Gecko / 20041107 Firefox / xx

// это поможет вам

 $uagent = $_SERVER['HTTP_USER_AGENT'] . "<br/>"; function os_info($uagent) { // the order of this array is important global $uagent; $oses = array( 'Win311' => 'Win16', 'Win95' => '(Windows 95)|(Win95)|(Windows_95)', 'WinME' => '(Windows 98)|(Win 9x 4.90)|(Windows ME)', 'Win98' => '(Windows 98)|(Win98)', 'Win2000' => '(Windows NT 5.0)|(Windows 2000)', 'WinXP' => '(Windows NT 5.1)|(Windows XP)', 'WinServer2003' => '(Windows NT 5.2)', 'WinVista' => '(Windows NT 6.0)', 'Windows 7' => '(Windows NT 6.1)', 'Windows 8' => '(Windows NT 6.2)', 'WinNT' => '(Windows NT 4.0)|(WinNT4.0)|(WinNT)|(Windows NT)', 'OpenBSD' => 'OpenBSD', 'SunOS' => 'SunOS', 'Ubuntu' => 'Ubuntu', 'Android' => 'Android', 'Linux' => '(Linux)|(X11)', 'iPhone' => 'iPhone', 'iPad' => 'iPad', 'MacOS' => '(Mac_PowerPC)|(Macintosh)', 'QNX' => 'QNX', 'BeOS' => 'BeOS', 'OS2' => 'OS/2', 'SearchBot' => '(nuhk)|(Googlebot)|(Yammybot)|(Openbot)|(Slurp)|(MSNBot)|(Ask Jeeves/Teoma)|(ia_archiver)' ); $uagent = strtolower($uagent ? $uagent : $_SERVER['HTTP_USER_AGENT']); foreach ($oses as $os => $pattern) if (preg_match('/' . $pattern . '/i', $uagent)) return $os; return 'Unknown'; } echo os_info($uagent); 

К сожалению, этого не может быть сделано.


С целью ответа на ваш вопрос, не заходя слишком далеко в том, почему обнюхивает агент пользователя, вот какой-то код, который будет делать то, что вы хотите:

 $mactest = strpos($_SERVER["HTTP_USER_AGENT"], 'Macintosh') ? true : false; if($mactest) { do something } else { do something else }