Determina se il sistema operativo è Mac

Recentemente ho fatto un sacco di ricerche su Google per cercare di trovare uno script php semplice e semplice che identificherà se l'utente è su un Mac o no.

Voglio usarlo per dire agli utenti se la scorciatoia da tastiera che sto dicendo è "control" o "command". Non ho bisogno di conoscere il browser o altro, solo se il computer è un Mac.

Ecco uno schema di ciò che sto chiedendo è ansible:

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

Crea una pagina: identificatore.php

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

quindi includilo nell'intestazione del tuo sito.

Dopo di che puoi usarlo in questo modo:

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

Modificare:

Per il telefono 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 arrays( '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 = arrays ( '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; } 

Prova la function get_browser() integrata in PHP.

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

Dai un'occhiata a http://ellislab.com/codeigniter/user-guide/libraries/user_agent.html

Come per Detect versione del sistema operativo esatto dal browser Risposta breve: Esattamente imansible.

Risposta lunga:

Tutto ciò che hai sono le informazioni nell'intestazione HTTP User-Agent, che di solito contiene il nome e la versione del SO.

Di solito, i browser in esecuzione su Mac OS e Linux inviano informazioni sufficienti per identificare il sistema operativo esatto. Ad esempio, ecco la mia intestazione User-Agent:

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

Puoi vedere che sto usando Ubuntu 8.10 Intrepid Ibex.

Ed ecco cosa rapporto di Firefox e Safari 4 Beta sul mio MacBook Pro:

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

Mozilla / 5.0 (Macintosh; U; Intel Mac OS X 10_5_6; it-it) AppleWebKit / 528.16 (KHTML, come Gecko) Versione / 4.0 Safari / 528.16

I browser Windows, d'altra parte, di solito riportno solo la versione del sistema operativo e non il pacchetto specifico (Pro, Business, ecc.):

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

// questo ti aiuterà

 $uagent = $_SERVER['HTTP_USER_AGENT'] . "<br/>"; function os_info($uagent) { // the order of this arrays is importnt global $uagent; $oses = arrays( '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); 

Sfortunatamente questo non può essere fatto.


Allo scopo di rispondere alla tua domanda senza andare troppo lontano nel motivo per cui lo sniffing di User Agent è interrotto, ecco un codice che farà ciò che vuoi:

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