Tarayıcıdan kesin OS sürüm algılamak

11 Cevap php

PHP / JS / ASP kullanarak benim tarayıcıdan kesin İşletim Sistemi sürümünü tespit bir yolu olup olmadığını merak ediyorum?

Ben OS (Windows XP, Windows Vista, OS X, vb) türünü algılayabilir biliyorum ama ben tam sürüm algılamak gerekir: Vista Business, Vista Ultimate, Windows XP Home, Windows XP Pro, vs ..

11 Cevap

Short answer: Yapamazsın.

Long answer:

Eğer tüm genellikle işletim sistemi adını ve sürümünü içeren HTTP User-Agent başlığında bilgidir.

Genellikle, tam OS tanımlamak için yeterli bilgi göndermek, Mac OS ve Linux üzerinde çalışan tarayıcılar. Örneğin, burada benim User-Agent başlığının bulunuyor:

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

Ben Ubuntu 8.10 Intrepid Ibex koşuyorum görebilirsiniz.

Ve burada benim MacBook Pro ne Firefox ve Safari 4 Beta raporu bulunuyor:

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, en-us) AppleWebKit/528.16 (KHTML, like Gecko) Version/4.0 Safari/528.16

Windows tarayıcılarda, diğer taraftan, genellikle sadece OS versiyonunu değil, özel paketi (Pro, İşletme, vb) rapor:

Mozilla/5.0 (Windows; U, Windows NT 5.1, ABD-tr; rv: xxx) Gecko/20041107 Firefox / xx

Bazı googling sonra bu kodu bulundu ve o ok çalışıyor gibi görünüyor, (gerçi Unix algılamıyor)

<?php 
$OSList = array
(
// Match user agent string with operating systems
'Windows 3.11' => 'Win16',
'Windows 95' => '(Windows 95)|(Win95)|(Windows_95)',
'Windows 98' => '(Windows 98)|(Win98)',
'Windows 2000' => '(Windows NT 5.0)|(Windows 2000)',
'Windows XP' => '(Windows NT 5.1)|(Windows XP)',
'Windows Server 2003' => '(Windows NT 5.2)',
'Windows Vista' => '(Windows NT 6.0)',
'Windows 7' => '(Windows NT 7.0)',
'Windows NT 4.0' => '(Windows NT 4.0)|(WinNT4.0)|(WinNT)|(Windows NT)',
'Windows ME' => 'Windows ME',
'Open BSD' => 'OpenBSD',
'Sun OS' => 'SunOS',
'Linux' => '(Linux)|(X11)',
'Mac OS' => '(Mac_PowerPC)|(Macintosh)',
'QNX' => 'QNX',
'BeOS' => 'BeOS',
'OS/2' => 'OS/2',
'Search Bot'=>'(nuhk)|(Googlebot)|(Yammybot)|(Openbot)|(Slurp)|(MSNBot)|(Ask Jeeves/Teoma)|(ia_archiver)'
);
// Loop through the array of user agents and matching operating systems
foreach($OSList as $CurrOS=>$Match)
{
// Find a match
if (eregi($Match, $_SERVER['HTTP_USER_AGENT']))
{
// We found the correct match
break;
}
}
// You are using ...
echo "You are using ".$CurrOS;
?>

/ / Bu size yardımcı olacaktır

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

Yukarıdaki PHP kodu küçük bir "hata" olduğunu ... Windows 7 sürümü 7.0 ama sürüm 6.1 değil!

'Windows 7' => '(Windows NT 6.1)'

Klasik ASP ve ASP.NET kullanımı

Request.ServerVariables("HTTP_USER_AGENT")

Bu kod yorumlanmaz beri, bu sunucu üzerinde çalışan en iyi çalışır.

Eğer gerçekten web uygulama işlevselliği için kesinlikle gerekli olmadığı sürece böyle bir şey yapıyor önlemek için çalışmalısınız.

Farkında olun ki:

Tüm istekleri windows çalıştıran bir istemci gelebilir.

Tüm istekleri JavaScript destekleyen bir istemci gelebilir.

User-agent başlık isteği mevcut olmayabilir.

Ne user-agent başlığında olduğu missleading olabilir.

İyi tasarlanmış bir web uygulaması ne olursa olsun isteği user-agent başlığında ne tam içerik ve işlevsellik sağlamak gerekir veya müşteri javascript veya başka clientside uzantısı destekliyorsa.

Ben Vista'nın farklı versiyonlarını ayırt etmek mümkün olacak sanmıyorum, ama navigator nesnenin platformu özelliğinden OS almak gerekir. Muhtemelen olsa, bunu ayrıştırmak ya da içeriklerine dayalı ayırt etmek gerekir.

<script type="text/javascript">
   alert( navigator.platform );
</script>

Için www.w3schools.com öğreticiler görün example gezginin özelliklerini tüm almak için nasıl gösteren.

EDIT:

Tam sürümünü almak için, bir ActiveX denetimi (yalnızca Windows) veya Java uygulaması geliştirmek ve mevcut sistem özelliklerini görüntülemek için java.lang.System nesnesini kullanmak mümkün olabilir. Sen Windows olmayan sistemler için tarayıcıdan yeterli bilgi almak ve yalnızca Windows sistemleri için denetimi kullanmak mümkün olabilir. Ben denemedim, o yüzden işe olacağını görmek için denemeniz gerekir ediyorum. Microsoft Update Microsoft'un ActiveX denetimi tam sistemi sürümünü ve o iş için yüklü yazılım tespit edebiliyoruz olduğuna inanmak gerekir.

Diğerleri zaten söylediğim gibi, hayır, güvenilir değil.

Yani örneğin jquery bu işlevleri bulunuyor için system (daha iyi bir kelime olmadığı için) yerine bir tarayıcı koklama sisteminin bir tarayıcı yetenekleri açık olduğu nedenidir.

Ben bunu yapan bir jquery fonksiyonu oluşturduk. Biz kullanarak tüm işletim izleyebilirsiniz Bu şekilde navigator.

Birisi bu yardım alabilirsiniz umuyoruz:

function find_os_version() {
  var ua = navigator.userAgent.toLowerCase();
  if (ua.indexOf("windows nt 5.0") != -1) {
    return 'win2k';
  }
  if (ua.indexOf("windows nt 5.1") != -1) {
    return 'winXP';
  }
  if (ua.indexOf("windows nt 6.0") != -1) {
    return 'winVista';
  }
  if (ua.indexOf("windows nt 6.1") != -1) {
    return 'win7';
  }
  if (ua.indexOf("windows nt 6.2") != -1) {
    return 'win8';
  }
}

Bu en kolay yolu olabilir:

http://mobiledetect.net adlı kütüphane indirin

CI kullanarak ya da sadece bunu eklerseniz 'kütüphaneler' için Mobile_Detect.php koydu.

PHP bu kodu kullanın

$detect = new Mobile_Detect();
// Get the version() of components.
$detect->version('iPad'); // 4.3 (float)
$detect->version('iPhone') // 3.1 (float)
$detect->version('Android'); // 2.1 (float)
$detect->version('Opera Mini'); // 5.0 (float)

http://dwij.co.in/mobile-os-detection-in-php-codeigniter belgelerine bul

Soru çok eski ama ben sadece cevap veriyorum rağmen:

sadece deneyin:

$this->agent->platform()

Linux, Windows, OS X, etc.: Bu gibi çıktı verecektir

Daha fazla bilgi için ziyaret için:

http://ellislab.com/codeigniter/user-guide/libraries/user_agent.html