Как определить "Google Chrome" в качестве пользовательского агента с помощью PHP?

Мне интересно узнать, является ли пользовательский агент "Chrome" на сервере с помощью PHP. Существует ли надежное регулярное выражение для разбора строки пользовательского агента из заголовка запроса?

Ответы

Ответ 1

В этот момент слишком много браузеров притворяются Chrome, чтобы ездить по своей популярности, а также бороться с злоупотреблениями браузером для простого соответствия "Chrome" для эффективности. Я бы порекомендовал функцию обнаружения функций в будущем, но Chrome (и WebKit/Blink в целом) печально известен тем, что лгал, чтобы также обнаруживать механизмы обнаружения, поэтому даже это не так здорово, как и раньше.

Я могу только рекомендовать оставаться на вершине вещей, сравнивая его известные строки UA с файлами других браузеров через сторонние сайты и создавая шаблоны оттуда. Как вы это делаете, это полностью зависит от самих строк. Просто имейте в виду, что из-за характера браузеров и строк UA никогда не может быть "надежного" регулярного выражения для их сопоставления.

В PHP соответствующий сервер var $_SERVER['HTTP_USER_AGENT'].

Ответ 2

Стоит отметить, что если вы также хотите включить Chrome для iOS, вам также нужно будет сопоставить с "CriOS":

if (strpos($_SERVER['HTTP_USER_AGENT'], 'Chrome') !== false
 || strpos($_SERVER['HTTP_USER_AGENT'], 'CriOS') !== false) {
    // User agent is Google Chrome
}

Ответ 3

Основываясь на ответе @Adams, более точно обнаруживая Google Chrome, исключив некоторые браузеры с помощью "Chrome" в строке пользовательского агента, используя useragentstring.com и udger.com:

if(preg_match('/(Chrome|CriOS)\//i',$_SERVER['HTTP_USER_AGENT'])
 && !preg_match('/(Aviator|ChromePlus|coc_|Dragon|Edge|Flock|Iron|Kinza|Maxthon|MxNitro|Nichrome|OPR|Perk|Rockmelt|Seznam|Sleipnir|Spark|UBrowser|Vivaldi|WebExplorer|YaBrowser)/i',$_SERVER['HTTP_USER_AGENT'])){
    // Browser might be Google Chrome
}