php - Obtener información del sistema operativo
operating-system (7)
Basado en la answer de Fred-II , quería compartir mi opinión sobre la función getOS, evita los globales, fusiona ambas listas y detecta la arquitectura (x32 / x64)
/**
* @param $user_agent null
* @return string
*/
function getOS($user_agent = null)
{
if(!isset($user_agent) && isset($_SERVER[''HTTP_USER_AGENT''])) {
$user_agent = $_SERVER[''HTTP_USER_AGENT''];
}
// https://stackoverflow.com/questions/18070154/get-operating-system-info-with-php
$os_array = [
''windows nt 10'' => ''Windows 10'',
''windows nt 6.3'' => ''Windows 8.1'',
''windows nt 6.2'' => ''Windows 8'',
''windows nt 6.1|windows nt 7.0'' => ''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 nt5.1|windows 2000'' => ''Windows 2000'',
''windows me'' => ''Windows ME'',
''windows nt 4.0|winnt4.0'' => ''Windows NT'',
''windows ce'' => ''Windows CE'',
''windows 98|win98'' => ''Windows 98'',
''windows 95|win95'' => ''Windows 95'',
''win16'' => ''Windows 3.11'',
''mac os x 10.1[^0-9]'' => ''Mac OS X Puma'',
''macintosh|mac os x'' => ''Mac OS X'',
''mac_powerpc'' => ''Mac OS 9'',
''linux'' => ''Linux'',
''ubuntu'' => ''Linux - Ubuntu'',
''iphone'' => ''iPhone'',
''ipod'' => ''iPod'',
''ipad'' => ''iPad'',
''android'' => ''Android'',
''blackberry'' => ''BlackBerry'',
''webos'' => ''Mobile'',
''(media center pc).([0-9]{1,2}/.[0-9]{1,2})''=>''Windows Media Center'',
''(win)([0-9]{1,2}/.[0-9x]{1,2})''=>''Windows'',
''(win)([0-9]{2})''=>''Windows'',
''(windows)([0-9x]{2})''=>''Windows'',
// Doesn''t seem like these are necessary...not totally sure though..
//''(winnt)([0-9]{1,2}/.[0-9]{1,2}){0,1}''=>''Windows NT'',
//''(windows nt)(([0-9]{1,2}/.[0-9]{1,2}){0,1})''=>''Windows NT'', // fix by bg
''Win 9x 4.90''=>''Windows ME'',
''(windows)([0-9]{1,2}/.[0-9]{1,2})''=>''Windows'',
''win32''=>''Windows'',
''(java)([0-9]{1,2}/.[0-9]{1,2}/.[0-9]{1,2})''=>''Java'',
''(Solaris)([0-9]{1,2}/.[0-9x]{1,2}){0,1}''=>''Solaris'',
''dos x86''=>''DOS'',
''Mac OS X''=>''Mac OS X'',
''Mac_PowerPC''=>''Macintosh PowerPC'',
''(mac|Macintosh)''=>''Mac OS'',
''(sunos)([0-9]{1,2}/.[0-9]{1,2}){0,1}''=>''SunOS'',
''(beos)([0-9]{1,2}/.[0-9]{1,2}){0,1}''=>''BeOS'',
''(risc os)([0-9]{1,2}/.[0-9]{1,2})''=>''RISC OS'',
''unix''=>''Unix'',
''os/2''=>''OS/2'',
''freebsd''=>''FreeBSD'',
''openbsd''=>''OpenBSD'',
''netbsd''=>''NetBSD'',
''irix''=>''IRIX'',
''plan9''=>''Plan9'',
''osf''=>''OSF'',
''aix''=>''AIX'',
''GNU Hurd''=>''GNU Hurd'',
''(fedora)''=>''Linux - Fedora'',
''(kubuntu)''=>''Linux - Kubuntu'',
''(ubuntu)''=>''Linux - Ubuntu'',
''(debian)''=>''Linux - Debian'',
''(CentOS)''=>''Linux - CentOS'',
''(Mandriva).([0-9]{1,3}(/.[0-9]{1,3})?(/.[0-9]{1,3})?)''=>''Linux - Mandriva'',
''(SUSE).([0-9]{1,3}(/.[0-9]{1,3})?(/.[0-9]{1,3})?)''=>''Linux - SUSE'',
''(Dropline)''=>''Linux - Slackware (Dropline GNOME)'',
''(ASPLinux)''=>''Linux - ASPLinux'',
''(Red Hat)''=>''Linux - Red Hat'',
// Loads of Linux machines will be detected as unix.
// Actually, all of the linux machines I''ve checked have the ''X11'' in the User Agent.
//''X11''=>''Unix'',
''(linux)''=>''Linux'',
''(amigaos)([0-9]{1,2}/.[0-9]{1,2})''=>''AmigaOS'',
''amiga-aweb''=>''AmigaOS'',
''amiga''=>''Amiga'',
''AvantGo''=>''PalmOS'',
//''(Linux)([0-9]{1,2}/.[0-9]{1,2}/.[0-9]{1,3}(rel/.[0-9]{1,2}){0,1}-([0-9]{1,2}) i([0-9]{1})86){1}''=>''Linux'',
//''(Linux)([0-9]{1,2}/.[0-9]{1,2}/.[0-9]{1,3}(rel/.[0-9]{1,2}){0,1} i([0-9]{1}86)){1}''=>''Linux'',
//''(Linux)([0-9]{1,2}/.[0-9]{1,2}/.[0-9]{1,3}(rel/.[0-9]{1,2}){0,1})''=>''Linux'',
''[0-9]{1,2}/.[0-9]{1,2}/.[0-9]{1,3})''=>''Linux'',
''(webtv)/([0-9]{1,2}/.[0-9]{1,2})''=>''WebTV'',
''Dreamcast''=>''Dreamcast OS'',
''GetRight''=>''Windows'',
''go!zilla''=>''Windows'',
''gozilla''=>''Windows'',
''gulliver''=>''Windows'',
''ia archiver''=>''Windows'',
''NetPositive''=>''Windows'',
''mass downloader''=>''Windows'',
''microsoft''=>''Windows'',
''offline explorer''=>''Windows'',
''teleport''=>''Windows'',
''web downloader''=>''Windows'',
''webcapture''=>''Windows'',
''webcollage''=>''Windows'',
''webcopier''=>''Windows'',
''webstripper''=>''Windows'',
''webzip''=>''Windows'',
''wget''=>''Windows'',
''Java''=>''Unknown'',
''flashget''=>''Windows'',
// delete next line if the script show not the right OS
//''(PHP)/([0-9]{1,2}.[0-9]{1,2})''=>''PHP'',
''MS FrontPage''=>''Windows'',
''(msproxy)/([0-9]{1,2}.[0-9]{1,2})''=>''Windows'',
''(msie)([0-9]{1,2}.[0-9]{1,2})''=>''Windows'',
''libwww-perl''=>''Unix'',
''UP.Browser''=>''Windows CE'',
''NetAnts''=>''Windows'',
];
// https://github.com/ahmad-sa3d/php-useragent/blob/master/core/user_agent.php
$arch_regex = ''//b(x86_64|x86-64|Win64|WOW64|x64|ia64|amd64|ppc64|sparc64|IRIX64)/b/ix'';
$arch = preg_match($arch_regex, $user_agent) ? ''64'' : ''32'';
foreach ($os_array as $regex => $value) {
if (preg_match(''{/b(''.$regex.'')/b}i'', $user_agent)) {
return $value.'' x''.$arch;
}
}
return ''Unknown'';
}
Recientemente comencé a preguntarme sobre sitios como http://thismachine.info/ que obtienen la información del sistema operativo del usuario. No he podido averiguar cómo hacerlo con PHP, y quería intentar resolverlo.
Noté que enumeran el user-agent
, que proporciona mucha información sobre el navegador. ¿Obtienen la información del sistema operativo de eso o de otra cosa? ¿Existe una API que pueda usar para obtener el sistema operativo del usuario?
¡Veo cómo consiguieron el navegador y la IP, pero no pudieron entender la parte del sistema operativo!
Cuando vas a un sitio web, tu navegador envía una solicitud al servidor web que incluye mucha información. Esta información podría verse más o menos así:
GET /questions/18070154/get-operating-system-info-with-php HTTP/1.1
Host: .com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate,sdch
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: <cookie data removed>
Pragma: no-cache
Cache-Control: no-cache
El servidor web utiliza esta información para determinar cómo manejar la solicitud; el idioma preferido y si la compresión está permitida.
En PHP, toda esta información se almacena en la matriz $_SERVER
. Para ver lo que está enviando a un servidor web, cree un nuevo archivo PHP e imprima todo desde la matriz.
<pre><?php print_r($_SERVER); ?></pre>
Esto le dará una buena representación de todo lo que se envía al servidor, desde donde puede extraer la información deseada, por ejemplo $_SERVER[''HTTP_USER_AGENT'']
para obtener el sistema operativo y el navegador.
El siguiente código podría explicar por sí mismo cómo http://thismachine.info/ puede mostrar qué sistema operativo está usando alguien.
Lo que hace es que olfatea su modelo de sistema operativo central, por ejemplo windows nt 5.1
como propio.
A continuación, pasa Windows NT 5.1 / I a Windows XP como sistema operativo.
Usando: ''/windows nt 5.1/i'' => ''Windows XP'',
desde una matriz.
Podrías decir adivinanzas, o una aproximación pero de todos modos bastante explosiva.
Tomado de una respuesta en SO https://.com/a/15497878/
<?php
$user_agent = $_SERVER[''HTTP_USER_AGENT''];
function getOS() {
global $user_agent;
$os_platform = "Unknown OS Platform";
$os_array = array(
''/windows nt 10/i'' => ''Windows 10'',
''/windows nt 6.3/i'' => ''Windows 8.1'',
''/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'',
''/edge/i'' => ''Edge'',
''/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'']."");
?>
Notas al pie: (19/14 de enero) Hubo una edición sugerida el 18 de enero de 2014 para agregar /msie|trident/i
por YJSoft un nuevo miembro en SO.
El comentario leído como:
Comentario: porque la ua de msie11 no incluye msie (incluye tridente en su lugar)
Investigué esto un poco, y encontré algunos enlaces que explican la secuencia de Trident.
- http://www.sitepoint.com/ie11-smells-like-firefox/
- http://www.upsdell.ca/BrowserNews/res_sniff.htm
- ¿Cómo puedo orientarme solo a Internet Explorer 11 con JavaScript?
- http://en.wikipedia.org/wiki/Trident_%28layout_engine%29
- https://.com/a/17907562/1415724
- http://msdn.microsoft.com/en-us/library/ie/bg182625(v=vs.110).aspx
- Un artículo en MSDN Blogs
- Un artículo sobre NCZOnline
Aunque la edición fue rechazada (no por mí mismo, sino por algunos de los otros editores), vale la pena leer en los enlaces anteriores y utilizar su juicio adecuado.
Según una pregunta acerca de la detección de SUSE, hemos encontrado este fragmento de código en la siguiente URL:
Código adicional:
/* return Operating System */
function operating_system_detection(){
if ( isset( $_SERVER ) ) {
$agent = $_SERVER[''HTTP_USER_AGENT''];
}
else {
global $HTTP_SERVER_VARS;
if ( isset( $HTTP_SERVER_VARS ) ) {
$agent = $HTTP_SERVER_VARS[''HTTP_USER_AGENT''];
}
else {
global $HTTP_USER_AGENT;
$agent = $HTTP_USER_AGENT;
}
}
$ros[] = array(''Windows XP'', ''Windows XP'');
$ros[] = array(''Windows NT 5.1|Windows NT5.1)'', ''Windows XP'');
$ros[] = array(''Windows 2000'', ''Windows 2000'');
$ros[] = array(''Windows NT 5.0'', ''Windows 2000'');
$ros[] = array(''Windows NT 4.0|WinNT4.0'', ''Windows NT'');
$ros[] = array(''Windows NT 5.2'', ''Windows Server 2003'');
$ros[] = array(''Windows NT 6.0'', ''Windows Vista'');
$ros[] = array(''Windows NT 7.0'', ''Windows 7'');
$ros[] = array(''Windows CE'', ''Windows CE'');
$ros[] = array(''(media center pc).([0-9]{1,2}/.[0-9]{1,2})'', ''Windows Media Center'');
$ros[] = array(''(win)([0-9]{1,2}/.[0-9x]{1,2})'', ''Windows'');
$ros[] = array(''(win)([0-9]{2})'', ''Windows'');
$ros[] = array(''(windows)([0-9x]{2})'', ''Windows'');
// Doesn''t seem like these are necessary...not totally sure though..
//$ros[] = array(''(winnt)([0-9]{1,2}/.[0-9]{1,2}){0,1}'', ''Windows NT'');
//$ros[] = array(''(windows nt)(([0-9]{1,2}/.[0-9]{1,2}){0,1})'', ''Windows NT''); // fix by bg
$ros[] = array(''Windows ME'', ''Windows ME'');
$ros[] = array(''Win 9x 4.90'', ''Windows ME'');
$ros[] = array(''Windows 98|Win98'', ''Windows 98'');
$ros[] = array(''Windows 95'', ''Windows 95'');
$ros[] = array(''(windows)([0-9]{1,2}/.[0-9]{1,2})'', ''Windows'');
$ros[] = array(''win32'', ''Windows'');
$ros[] = array(''(java)([0-9]{1,2}/.[0-9]{1,2}/.[0-9]{1,2})'', ''Java'');
$ros[] = array(''(Solaris)([0-9]{1,2}/.[0-9x]{1,2}){0,1}'', ''Solaris'');
$ros[] = array(''dos x86'', ''DOS'');
$ros[] = array(''unix'', ''Unix'');
$ros[] = array(''Mac OS X'', ''Mac OS X'');
$ros[] = array(''Mac_PowerPC'', ''Macintosh PowerPC'');
$ros[] = array(''(mac|Macintosh)'', ''Mac OS'');
$ros[] = array(''(sunos)([0-9]{1,2}/.[0-9]{1,2}){0,1}'', ''SunOS'');
$ros[] = array(''(beos)([0-9]{1,2}/.[0-9]{1,2}){0,1}'', ''BeOS'');
$ros[] = array(''(risc os)([0-9]{1,2}/.[0-9]{1,2})'', ''RISC OS'');
$ros[] = array(''os/2'', ''OS/2'');
$ros[] = array(''freebsd'', ''FreeBSD'');
$ros[] = array(''openbsd'', ''OpenBSD'');
$ros[] = array(''netbsd'', ''NetBSD'');
$ros[] = array(''irix'', ''IRIX'');
$ros[] = array(''plan9'', ''Plan9'');
$ros[] = array(''osf'', ''OSF'');
$ros[] = array(''aix'', ''AIX'');
$ros[] = array(''GNU Hurd'', ''GNU Hurd'');
$ros[] = array(''(fedora)'', ''Linux - Fedora'');
$ros[] = array(''(kubuntu)'', ''Linux - Kubuntu'');
$ros[] = array(''(ubuntu)'', ''Linux - Ubuntu'');
$ros[] = array(''(debian)'', ''Linux - Debian'');
$ros[] = array(''(CentOS)'', ''Linux - CentOS'');
$ros[] = array(''(Mandriva).([0-9]{1,3}(/.[0-9]{1,3})?(/.[0-9]{1,3})?)'', ''Linux - Mandriva'');
$ros[] = array(''(SUSE).([0-9]{1,3}(/.[0-9]{1,3})?(/.[0-9]{1,3})?)'', ''Linux - SUSE'');
$ros[] = array(''(Dropline)'', ''Linux - Slackware (Dropline GNOME)'');
$ros[] = array(''(ASPLinux)'', ''Linux - ASPLinux'');
$ros[] = array(''(Red Hat)'', ''Linux - Red Hat'');
// Loads of Linux machines will be detected as unix.
// Actually, all of the linux machines I''ve checked have the ''X11'' in the User Agent.
//$ros[] = array(''X11'', ''Unix'');
$ros[] = array(''(linux)'', ''Linux'');
$ros[] = array(''(amigaos)([0-9]{1,2}/.[0-9]{1,2})'', ''AmigaOS'');
$ros[] = array(''amiga-aweb'', ''AmigaOS'');
$ros[] = array(''amiga'', ''Amiga'');
$ros[] = array(''AvantGo'', ''PalmOS'');
//$ros[] = array(''(Linux)([0-9]{1,2}/.[0-9]{1,2}/.[0-9]{1,3}(rel/.[0-9]{1,2}){0,1}-([0-9]{1,2}) i([0-9]{1})86){1}'', ''Linux'');
//$ros[] = array(''(Linux)([0-9]{1,2}/.[0-9]{1,2}/.[0-9]{1,3}(rel/.[0-9]{1,2}){0,1} i([0-9]{1}86)){1}'', ''Linux'');
//$ros[] = array(''(Linux)([0-9]{1,2}/.[0-9]{1,2}/.[0-9]{1,3}(rel/.[0-9]{1,2}){0,1})'', ''Linux'');
$ros[] = array(''[0-9]{1,2}/.[0-9]{1,2}/.[0-9]{1,3})'', ''Linux'');
$ros[] = array(''(webtv)/([0-9]{1,2}/.[0-9]{1,2})'', ''WebTV'');
$ros[] = array(''Dreamcast'', ''Dreamcast OS'');
$ros[] = array(''GetRight'', ''Windows'');
$ros[] = array(''go!zilla'', ''Windows'');
$ros[] = array(''gozilla'', ''Windows'');
$ros[] = array(''gulliver'', ''Windows'');
$ros[] = array(''ia archiver'', ''Windows'');
$ros[] = array(''NetPositive'', ''Windows'');
$ros[] = array(''mass downloader'', ''Windows'');
$ros[] = array(''microsoft'', ''Windows'');
$ros[] = array(''offline explorer'', ''Windows'');
$ros[] = array(''teleport'', ''Windows'');
$ros[] = array(''web downloader'', ''Windows'');
$ros[] = array(''webcapture'', ''Windows'');
$ros[] = array(''webcollage'', ''Windows'');
$ros[] = array(''webcopier'', ''Windows'');
$ros[] = array(''webstripper'', ''Windows'');
$ros[] = array(''webzip'', ''Windows'');
$ros[] = array(''wget'', ''Windows'');
$ros[] = array(''Java'', ''Unknown'');
$ros[] = array(''flashget'', ''Windows'');
// delete next line if the script show not the right OS
//$ros[] = array(''(PHP)/([0-9]{1,2}.[0-9]{1,2})'', ''PHP'');
$ros[] = array(''MS FrontPage'', ''Windows'');
$ros[] = array(''(msproxy)/([0-9]{1,2}.[0-9]{1,2})'', ''Windows'');
$ros[] = array(''(msie)([0-9]{1,2}.[0-9]{1,2})'', ''Windows'');
$ros[] = array(''libwww-perl'', ''Unix'');
$ros[] = array(''UP.Browser'', ''Windows CE'');
$ros[] = array(''NetAnts'', ''Windows'');
$file = count ( $ros );
$os = '''';
for ( $n=0 ; $n<$file ; $n++ ){
if ( preg_match(''/''.$ros[$n][0].''/i'' , $agent, $name)){
$os = @$ros[$n][1].'' ''.@$name[2];
break;
}
}
return trim ( $os );
}
Edición: 12 de abril de 2015
Noté una pregunta ayer que podría ser relevante para esta sesión de preguntas y respuestas y que podría ser útil para algunos. En lo que respecta a:
Mozilla/5.0 (Linux; Android 4.4.2; SAMSUNG-GT-I9505 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36
- Pregunta: Almacene datos específicos en la variable de otra variable con expresiones regulares con PHP
- Respuesta: https://.com/a/29584014/
Otra edición y agregando un enlace de referencia que se solicitó (y se respondió / aceptó hoy, 4 y 16 de noviembre) que puede ser de utilidad.
Consulte las preguntas y respuestas aquí en Stack:
Puede buscar esta información en $_SERVER[''HTTP_USER_AGENT'']
, pero su formato es de formato libre, no se garantiza que se envíe, y el usuario puede modificarlo fácilmente, ya sea por razones de privacidad u otros.
Si no ha configurado la directiva browsecap
, esto devolverá una advertencia. Para asegurarse de que esté configurado, puede recuperar el valor usando ini_get
y ver si está configurado.
if(ini_get("browscap")) {
$browser = get_browser(null, true);
$browser = get_browser($_SERVER[''HTTP_USER_AGENT'']);
}
Como explicó kba en su respuesta, su navegador envía mucha información al servidor mientras carga una página web. La mayoría de los sitios web usan esta información de User-agent para determinar el sistema operativo del visitante, el navegador y otra información.
Si desea muy poca información como una clase en su html para navegadores comunes, por ejemplo, puede usar:
function get_browser()
{
$browser = '''';
$ua = strtolower($_SERVER[''HTTP_USER_AGENT'']);
if (preg_match(''~(?:msie ?|trident.+?; ?rv: ?)(/d+)~'', $ua, $matches)) $browser = ''ie ie''.$matches[1];
elseif (preg_match(''~(safari|chrome|firefox)~'', $ua, $matches)) $browser = $matches[1];
return $browser;
}
que devolverá ''safari'' o ''firefox'' o ''chrome'', o ''ie ie8'', ''ie ie9'', ''ie ie10'', ''ie ie11''.
Si desea obtener toda esa información, es posible que desee leer esto:
http://php.net/manual/en/function.get-browser.php
Puede ejecutar el código de muestra y verá cómo funciona:
<?php
echo $_SERVER[''HTTP_USER_AGENT''] . "/n/n";
$browser = get_browser(null, true);
print_r($browser);
?>
El ejemplo anterior dará como resultado algo similar a:
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040803 Firefox/0.9.3
Array
(
[browser_name_regex] => ^mozilla/5/.0 (windows; .; windows nt 5/.1; .*rv:.*) gecko/.* firefox/0/.9.*$
[browser_name_pattern] => Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:*) Gecko/* Firefox/0.9*
[parent] => Firefox 0.9
[platform] => WinXP
[browser] => Firefox
[version] => 0.9
[majorver] => 0
[minorver] => 9
[cssversion] => 2
[frames] => 1
[iframes] => 1
[tables] => 1
[cookies] => 1
[backgroundsounds] =>
[vbscript] =>
[javascript] => 1
[javaapplets] => 1
[activexcontrols] =>
[cdf] =>
[aol] =>
[beta] => 1
[win16] =>
[crawler] =>
[stripper] =>
[wap] =>
[netclr] =>
)
Tomó el siguiente código del manual php para get_browser .
$browser = get_browser(null, true);
print_r($browser);
El conjunto de $browser
tiene incluida la información de la platform
que le proporciona el sistema operativo específico en uso.
Asegúrese de ver la sección "Notas" en esa página. Esto podría ser algo (thismachine.info) si no es algo que ya está apuntado en otras respuestas.