Привет Хочу поделится вот такой процедурой парсинга useragent, и заодно может со временем сообщество поможет улучшить\дополнить код: Вызываем, ясное дело, так: PHP: function get_client_info($user_agent) { $browser = "Browser ?"; $version = "Version ?"; $os = "OS ?"; $os_version = "Version ?"; // Определение операционной системы и её версии if (preg_match('/windows nt 10\.0/i', $user_agent)) { $os = 'Windows'; // Проверка на Windows 11 if (preg_match('/windows 11/i', $user_agent)) { $os_version = '11'; } else { $os_version = '10'; } } elseif (preg_match('/windows nt 6.3/i', $user_agent)) { $os = 'Windows'; $os_version = '8.1'; } elseif (preg_match('/windows nt 6.2/i', $user_agent)) { $os = 'Windows'; $os_version = '8'; } elseif (preg_match('/windows nt 6.1/i', $user_agent)) { $os = 'Windows'; $os_version = '7'; } elseif (preg_match('/windows nt 6.0/i', $user_agent)) { $os = 'Windows'; $os_version = 'Vista'; } elseif (preg_match('/windows nt 5.1/i', $user_agent)) { $os = 'Windows'; $os_version = 'XP'; } elseif (preg_match('/android/i', $user_agent)) { $os = 'Android'; if (preg_match('/android (\d+\.\d+)/i', $user_agent, $matches)) { $os_version = $matches[1]; } } elseif (preg_match('/iphone|ipad|ipod/i', $user_agent)) { $os = 'iOS'; if (preg_match('/os (\d+)[._](\d+)/i', $user_agent, $matches)) { $os_version = $matches[1] . '.' . $matches[2]; } } elseif (preg_match('/macintosh|mac os x/i', $user_agent)) { $os = 'Mac OS'; if (preg_match('/mac os x (\d+)[._](\d+)/i', $user_agent, $matches)) { $os_version = $matches[1] . '.' . $matches[2]; } } elseif (preg_match('/linux/i', $user_agent)) { $os = 'Linux'; if (preg_match('/ubuntu/i', $user_agent)) { $os = 'Ubuntu'; if (preg_match('/ubuntu\/(\d+\.\d+)/i', $user_agent, $matches)) { $os_version = $matches[1]; } } } // Определение браузера и его версии if (preg_match('/yabrowser/i', $user_agent)) { $browser = 'Yandex Browser'; preg_match('/yabrowser\/(\d+\.\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/vivaldi/i', $user_agent)) { $browser = 'Vivaldi'; preg_match('/vivaldi\/(\d+\.\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/brave/i', $user_agent)) { $browser = 'Brave'; preg_match('/brave\/(\d+\.\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/duckduckgo/i', $user_agent)) { $browser = 'DuckDuckGo'; preg_match('/duckduckgo\/(\d+\.\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/samsungbrowser/i', $user_agent)) { $browser = 'Samsung Internet'; preg_match('/samsungbrowser\/(\d+\.\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/lgbrowser/i', $user_agent)) { $browser = 'LG Browser'; preg_match('/lgbrowser\/(\d+\.\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/huaweibrowser|hbpc/i', $user_agent)) { $browser = 'Huawei Browser'; preg_match('/huaweibrowser\/(\d+\.\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/miuibrowser/i', $user_agent)) { $browser = 'Mi Browser'; preg_match('/miuibrowser\/(\d+\.\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/oppobrowser/i', $user_agent)) { $browser = 'Oppo Browser'; preg_match('/oppobrowser\/(\d+\.\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/vivobrowser/i', $user_agent)) { $browser = 'Vivo Browser'; preg_match('/vivobrowser\/(\d+\.\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/ucbrowser/i', $user_agent)) { $browser = 'UC Browser'; preg_match('/ucbrowser\/(\d+\.\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/opr/i', $user_agent)) { $browser = 'Opera'; preg_match('/opr\/(\d+\.\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/edg/i', $user_agent)) { $browser = 'Microsoft Edge (Chromium)'; preg_match('/edg\/(\d+\.\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/chromium/i', $user_agent)) { $browser = 'Chromium'; preg_match('/chromium\/(\d+\.\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/epic/i', $user_agent)) { $browser = 'Epic Privacy Browser'; preg_match('/epic\/(\d+\.\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/slimjet/i', $user_agent)) { $browser = 'Slimjet'; preg_match('/slimjet\/(\d+\.\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/dragon/i', $user_agent)) { $browser = 'Comodo Dragon'; preg_match('/dragon\/(\d+\.\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/360browser|qhbrowser/i', $user_agent)) { $browser = '360 Browser'; preg_match('/360browser\/(\d+\.\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/coc coc/i', $user_agent)) { $browser = 'Coc Coc'; preg_match('/coc coc\/(\d+\.\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/msie/i', $user_agent) && !preg_match('/opera/i', $user_agent)) { $browser = 'Internet Explorer'; preg_match('/msie\s(\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/firefox/i', $user_agent)) { $browser = 'Mozilla Firefox'; preg_match('/firefox\/(\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/chrome/i', $user_agent) && !preg_match('/edge|yabrowser|vivaldi|brave|duckduckgo|samsungbrowser|ucbrowser|opr|lgbrowser|huaweibrowser|miuibrowser|oppobrowser|vivobrowser|chromium|epic|slimjet|dragon|360browser|coc coc/i', $user_agent)) { $browser = 'Google Chrome'; preg_match('/chrome\/(\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/safari/i', $user_agent) && !preg_match('/chrome/i', $user_agent)) { $browser = 'Apple Safari'; preg_match('/version\/(\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } if ($browser == "Browser ?" && $version == "Version ?" && $os == "OS ?" && $os_version == "Version ?") { return $user_agent; } return "$browser $version; $os $os_version"; } Кто попробует у себя - просьба отписываться верно ли определена пара Браузер\Версия\Ось\Версия Оси, с указанием ваших данных. У меня верно отработали: Не совсем верно отработал вариант:
https://github.com/WhichBrowser/Parser-PHP Чтобы заинтересовать "тусовку" надо сделать хотя бы на таком уровне. А так -- ну ок, молодец.
Добрый день! Советую так изменить return: PHP: return [ "browser" => $browser, "version" => $version , "os" => $os, "os_version" => $os_version ]; И для тестирования браузеров на мобильных устройствах PHP: <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1" /> </head> <?php $sua = $_SERVER["HTTP_USER_AGENT"]; $browser = get_client_info($sua); echo "<div style=inline-size: 100wd;overflow-wrap: break-word>$sua</div><pre>"; print_r($browser); Протестировал: Код (Text): Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:136.0) Gecko/20100101 Firefox/136.0 Array ( [browser] => Mozilla Firefox [version] => 136 [os] => Windows [os_version] => 10 ) Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36 OPR/117.0.0.0 Array ( [browser] => Opera [version] => 117.0 [os] => Windows [os_version] => 10 ) Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Array ( [browser] => Google Chrome [version] => 134 [os] => Windows [os_version] => 10 ) Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0 Array ( [browser] => Microsoft Edge (Chromium) [version] => 134.0 [os] => Windows [os_version] => 10 ) Удачи!
Спасибо. Вот еще надо бы как-то проверить такую доделку, но win11 нету для проверки: PHP: $headers = [ 'Sec-CH-UA-Platform' => $_SERVER['HTTP_SEC_CH_UA_PLATFORM'] ?? null, 'Sec-CH-UA-Platform-Version' => $_SERVER['HTTP_SEC_CH_UA_PLATFORM_VERSION'] ?? null, ]; // Определение операционной системы и её версии if (preg_match('/windows nt 10\.0/i', $user_agent)) { //Win 10 or 11 $os = 'Windows'; // Проверка на Windows 11 if (preg_match('/windows 11/i', $user_agent)) { $os_version = '11'; } else { $os_version = '10'; } // Использование Client Hints для определения Windows 11 if (isset($headers['Sec-CH-UA-Platform']) && strtolower($headers['Sec-CH-UA-Platform']) === 'windows') { if (isset($headers['Sec-CH-UA-Platform-Version']) && $headers['Sec-CH-UA-Platform-Version'] === '13.0.0') { $os_version = '11'; }else{ $os_version = '10'; } } }..... Спойлер: Полная версия функции PHP: function get_client_info($user_agent) { $browser = "Browser ?"; $version = "v.?"; $os = "OS ?"; $os_version = "v.?"; $headers = [ 'Sec-CH-UA-Platform' => $_SERVER['HTTP_SEC_CH_UA_PLATFORM'] ?? null, 'Sec-CH-UA-Platform-Version' => $_SERVER['HTTP_SEC_CH_UA_PLATFORM_VERSION'] ?? null, ]; // Определение операционной системы и её версии if (preg_match('/windows nt 10\.0/i', $user_agent)) { //Win 10 or 11 $os = 'Windows'; // Проверка на Windows 11 if (preg_match('/windows 11/i', $user_agent)) { $os_version = '11'; } else { $os_version = '10'; } // Использование Client Hints для определения Windows 11 if (isset($headers['Sec-CH-UA-Platform']) && strtolower($headers['Sec-CH-UA-Platform']) === 'windows') { if (isset($headers['Sec-CH-UA-Platform-Version']) && $headers['Sec-CH-UA-Platform-Version'] === '13.0.0') { $os_version = '11'; }else{ $os_version = '10'; } } } elseif (preg_match('/windows nt 6.3/i', $user_agent)) { $os = 'Windows'; $os_version = '8.1'; } elseif (preg_match('/windows nt 6.2/i', $user_agent)) { $os = 'Windows'; $os_version = '8'; } elseif (preg_match('/windows nt 6.1/i', $user_agent)) { $os = 'Windows'; $os_version = '7'; } elseif (preg_match('/windows nt 6.0/i', $user_agent)) { $os = 'Windows'; $os_version = 'Vista'; } elseif (preg_match('/windows nt 5.1/i', $user_agent)) { $os = 'Windows'; $os_version = 'XP'; } elseif (preg_match('/android/i', $user_agent)) { $os = 'Android'; if (preg_match('/android (\d+\.\d+)/i', $user_agent, $matches)) { $os_version = $matches[1]; } } elseif (preg_match('/iphone|ipad|ipod/i', $user_agent)) { $os = 'iOS'; if (preg_match('/os (\d+)[._](\d+)/i', $user_agent, $matches)) { $os_version = $matches[1] . '.' . $matches[2]; } } elseif (preg_match('/macintosh|mac os x/i', $user_agent)) { $os = 'Mac OS'; if (preg_match('/mac os x (\d+)[._](\d+)/i', $user_agent, $matches)) { $os_version = $matches[1] . '.' . $matches[2]; } } elseif (preg_match('/linux/i', $user_agent)) { $os = 'Linux'; if (preg_match('/ubuntu/i', $user_agent)) { $os = 'Ubuntu'; if (preg_match('/ubuntu\/(\d+\.\d+)/i', $user_agent, $matches)) { $os_version = $matches[1]; } } } // Определение браузера и его версии if (preg_match('/yabrowser/i', $user_agent)) { $browser = 'Yandex Browser'; preg_match('/yabrowser\/(\d+\.\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/vivaldi/i', $user_agent)) { $browser = 'Vivaldi'; preg_match('/vivaldi\/(\d+\.\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/brave/i', $user_agent)) { $browser = 'Brave'; preg_match('/brave\/(\d+\.\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/duckduckgo/i', $user_agent)) { $browser = 'DuckDuckGo'; preg_match('/duckduckgo\/(\d+\.\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/samsungbrowser/i', $user_agent)) { $browser = 'Samsung Internet'; preg_match('/samsungbrowser\/(\d+\.\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/lgbrowser/i', $user_agent)) { $browser = 'LG Browser'; preg_match('/lgbrowser\/(\d+\.\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/huaweibrowser|hbpc/i', $user_agent)) { $browser = 'Huawei Browser'; preg_match('/huaweibrowser\/(\d+\.\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/miuibrowser/i', $user_agent)) { $browser = 'Mi Browser'; preg_match('/miuibrowser\/(\d+\.\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/oppobrowser/i', $user_agent)) { $browser = 'Oppo Browser'; preg_match('/oppobrowser\/(\d+\.\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/vivobrowser/i', $user_agent)) { $browser = 'Vivo Browser'; preg_match('/vivobrowser\/(\d+\.\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/ucbrowser/i', $user_agent)) { $browser = 'UC Browser'; preg_match('/ucbrowser\/(\d+\.\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/opr/i', $user_agent)) { $browser = 'Opera'; preg_match('/opr\/(\d+\.\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/edg/i', $user_agent)) { $browser = 'Microsoft Edge (Chromium)'; preg_match('/edg\/(\d+\.\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/chromium/i', $user_agent)) { $browser = 'Chromium'; preg_match('/chromium\/(\d+\.\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/epic/i', $user_agent)) { $browser = 'Epic Privacy Browser'; preg_match('/epic\/(\d+\.\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/slimjet/i', $user_agent)) { $browser = 'Slimjet'; preg_match('/slimjet\/(\d+\.\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/dragon/i', $user_agent)) { $browser = 'Comodo Dragon'; preg_match('/dragon\/(\d+\.\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/360browser|qhbrowser/i', $user_agent)) { $browser = '360 Browser'; preg_match('/360browser\/(\d+\.\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/coc coc/i', $user_agent)) { $browser = 'Coc Coc'; preg_match('/coc coc\/(\d+\.\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/msie/i', $user_agent) && !preg_match('/opera/i', $user_agent)) { $browser = 'Internet Explorer'; preg_match('/msie\s(\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/firefox/i', $user_agent)) { $browser = 'Mozilla Firefox'; preg_match('/firefox\/(\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/chrome/i', $user_agent) && !preg_match('/edge|yabrowser|vivaldi|brave|duckduckgo|samsungbrowser|ucbrowser|opr|lgbrowser|huaweibrowser|miuibrowser|oppobrowser|vivobrowser|chromium|epic|slimjet|dragon|360browser|coc coc/i', $user_agent)) { $browser = 'Google Chrome'; preg_match('/chrome\/(\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } elseif (preg_match('/safari/i', $user_agent) && !preg_match('/chrome/i', $user_agent)) { $browser = 'Apple Safari'; preg_match('/version\/(\d+)/i', $user_agent, $matches); if (!empty($matches[1])) { $version = $matches[1]; } } if ($browser == "Browser ?" && $version == "v.?" && $os == "OS ?" && $os_version == "v.?") { return $user_agent; } return "$browser $version; $os $os_version"; } У кого Win11 - протестируйте, определяется ли Win11.
У нормальных людей уже Windows 25. "Мы думали в 2025 люди будут покорять другие планеты, телепорт, человекоподобные роботы в каждом доме и всеобщее процветание..."