Intereting Posts
php: исключение catch и продолжить выполнение, возможно ли это? "Диапазон не в порядке в классе символов" в PHP регулярное выражение? Выбросить исключение в функции или как выполнить обработку ошибок спуска Неустранимая ошибка – слишком много открытых файлов Как работать с UAC при установке XAMPP PHP Неустранимая ошибка: вызов функции-члена fetch_array () в boolean Как удалить zip-файл с помощью php Могу ли я определить PHP_INT_SIZE на 4 байта в 64-битной системе, на которой запущен PHP? Предупреждение: exec (): невозможно использовать fork в PHP Как установить список доверенных сертификатов для клиента сокета в PHP? Запрос был черным – CakePHP Nginx + PHP: остановить процесс при аннулированном запросе Полное имя с действующим адресом электронной почты Когда использовать $ this-> свойство вместо $ property в PHP Выполнение множественного соединения с выражениями в Zend Framework 2

Обнаружить точную версию ОС из браузера

Мне было интересно, есть ли способ определить точную версию операционной системы из моего браузера с помощью PHP / JS / ASP?

Я знаю, что могу определить тип ОС (Windows XP, Windows Vista, OS X и т. Д.), Но мне нужно определить точную версию: Vista Business, Vista Ultimate, Windows XP Home, Windows XP Pro и т. Д.

Короткий ответ: вы не можете.

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

Все, что у вас есть, это информация в заголовке 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

После некоторого googling я нашел этот код и, похоже, работает нормально (не обнаруживает Unix)

<?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; ?> 

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

 $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)', 'Windows 8.1' => '(Windows NT 6.3)', 'Windows 10' => '(Windows NT 10.0)', '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); 

В классическом ASP и ASP.NET

 Request.ServerVariables("HTTP_USER_AGENT") 

Это лучше всего работает, поскольку это не интерпретируемый код, который работает на сервере.

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

Быть в курсе, что:

Не все запросы могут поступать от клиента, работающего на окнах.

Не все запросы могут поступать от клиента, который поддерживает JavaScript.

Заголовок запроса пользователя может отсутствовать в запросе.

То, что находится в заголовке user-agent, может быть пропущено.

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

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

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

См. Учебники http://www.w3schools.com для примера, показывающие, как получить все свойства навигатора.

EDIT :

Чтобы получить точную версию, вы можете разработать элемент управления ActiveX (только для Windows) или Java-апплет и использовать объект java.lang.System для просмотра текущих свойств системы. Вы можете получить достаточную информацию из браузера для систем, отличных от Windows, и использовать элемент управления только для систем Windows. Я не пробовал это, поэтому вам нужно будет поэкспериментировать, чтобы убедиться, что это сработает. Я должен полагать, что элемент управления ActiveX Microsoft для Microsoft Update способен обнаруживать точную версию системы и установленное программное обеспечение для ее работы.

Как уже говорили другие, нет, не надежно.

Вот почему, например, jQuery переключился на систему возможностей браузера (из-за отсутствия лучшего слова) вместо системы браузера-нюхания для ее функций.

Я создал функцию jquery, которая делает это. Таким образом, мы можем отслеживать всю ОС с помощью навигатора .

Надеюсь, кто-то получит помощь от этого:

 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'; } } 

Это может быть самым простым способом:

Загрузите библиотеку с http://mobiledetect.net

Поместите Mobile_Detect.php в «библиотеки», если используете CI или просто включите его.

Использовать этот код в PHP

 $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

в CodeIgniter вы можете найти библиотеку под названием «user_agent». Это даст вам все, что вам действительно нужно. Если вы не используете CI, вы все равно можете «извлечь» код для своей структуры. Надеюсь, это поможет. http://codeigniter.com/user_guide/libraries/user_agent.html

Хотя вопрос очень старый, но я просто отвечаю на него:

просто попробуй:

$this->agent->platform()

это даст вам выход как: Linux, Windows, OS X, etc.

для получения дополнительной информации:

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