Web

Как получить информацию об операционной системе посетителя сайта

Недавно я начал интересоваться такими сайтами, как http://thismachine.info/, которые получают информацию об операционной системе пользователя. Мне не удалось выяснить, как это сделать с помощью PHP, и я хотел попытаться понять это.

Я заметил, что они перечисляют user-agent, что дает много информации о браузере. Оттуда они получают информацию об операционной системе или от чего-то еще? Есть ли API, с помощью которого я могу получить операционную систему пользователя?

 

Ответ 1

Приведенный ниже код может показать, какую операционную систему кто-то использует. Он определяет вашу базовую модель операционной системы, а потом конкретизирует параметры операционной системы и ищет информацию о ней.

<?php

$user_agent = $_SERVER['HTTP_USER_AGENT'];

function getOS() { 

    global $user_agent;

    $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        = "Неизвестный браузер";

    $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>Браузер: </strong>".$user_browser."<br /><strong>Операционная система: </strong>".$user_os."";

print_r($device_details);

echo("<br /><br /><br />".$_SERVER['HTTP_USER_AGENT']."");

?>

 Дополнительный код:

/* возвращает операционную систему */

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

    // Многие Linux-машины будут определяться как unix.

    // На самом деле, все машины linux, которые я проверил, имеют 'X11' в 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 );

}

 

 Ответ 2

Когда вы переходите на веб-сайт, ваш браузер отправляет запрос на веб-сервер, содержащий много информации. Эта информация может выглядеть примерно так:

GET /questions/18070154/get-operating-system-info-with-php HTTP/1.1  

Host: codernet.ru  

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

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

В PHP вся эта информация хранится в массиве $_SERVER. Чтобы увидеть, что вы отправляете на веб-сервер, создайте новый файл PHP и распечатайте все из массива.

<pre><?php print_r($_SERVER); ?></pre>

Это даст вам хорошее представление обо всем, что отправляется на сервер, откуда вы можете извлечь желаемую информацию, например: $_SERVER['HTTP_USER_AGENT'],чтобы получить операционную систему и браузер.

 

Ответ 3

Вы можете найти эту информацию в $_SERVER['HTTP_USER_AGENT'], но ее формат является произвольным, не гарантируется отправка и может быть легко изменен пользователем, будь то в целях конфиденциальности или по другим причинам. Если вы не установили директиву browscap, это приведет к предупреждению. Чтобы убедиться, что она установлена, вы можете получить значение с помощью ini_get и посмотреть, установлено ли оно.

if(ini_get("browscap")) {

    $browser = get_browser(null, true);

    $browser = get_browser($_SERVER['HTTP_USER_AGENT']);  

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

 

Ответ 4

Если вам нужно немного информации, например, класс в html для распространенных браузеров, вы можете использовать:

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;

}

 который вернет 'safari' или 'firefox', или 'chrome', или 'ie ie8', 'ie ie9', 'ie ie10', 'ie ie11'.

Схожие статьи

Web

Как отсортировать многомерный массив по некоторому значению?

Web

Как использовать PHPMailer для массовой рассылки писем

Способы защиты от отслеживания в Firefox: настройка анонимности и черный список
Web

Способы защиты от отслеживания в Firefox: настройка анонимности и черный список

Twitch: что это за сайт и почему он популярен среди стримеров?
Web

Twitch: что это за сайт и почему он популярен среди стримеров?

×