Ниже приведена функция GetAgentName (Group,Agent), которая распознает тип клиентского приложения по строке User-Agent в заголовке HTTP-запроса. В случае успеха функция возвращает true и записывает в переменную Agent имя и номер версии клиентского приложения, а в переменную Group название группы, к которой оно относится.
Для сканирующих роботов выделены 2 группы: Search engines и Advert optimizers.
function GetAgentName ( & $GroupName, & $AgentName ) { global $_SERVER; $GroupName = 'other'; $AgentName = 'other agents'; $BrowsCaps = array ( 'Search engines' => array ( 'Aport' => array ( '^Mozilla/5\.0 \(compatible; AportWorm/(.)+\)$', ), 'Cuil' => array ( '^Mozilla/5.0 \(Twiceler-0.9 http://www.cuil.com/twiceler/robot.html\)$', ), 'Google' => array ( '^(.)*Googlebot(.)*', '^FeedFetcher-Google(.)*', '^Googlebot-Image(.)*', ), 'Hatena' => array ( '^Hatena Antenna(.)+', ), 'Mail.Ru' => array ( '^Mail.Ru/(.)+', ), 'MSN search bot' => array ( '^msnbot(.)*', ), 'Rambler' => array ( '^StackRambler(.)+', ), 'Yahoo!' => array ( '^Mozilla/5\.0(.)+Yahoo!(.)+Slurp(.)+', ), 'Yandex' => array ( '^Yandex(.)+', ) ), 'Advert optimizer' => array ( 'Google advert optimizer' => array ( '^Mediapartners-Google(.)*', ), ), 'Chrome' => array ( 'Chrome 1.x' => array ( '^(.)+ AppleWebKit/(.)+ \(KHTML, like Gecko\) Chrome/1(.)+ Safari/(.)+', ), 'Chrome 2.x' => array ( '^(.)+ AppleWebKit/(.)+ \(KHTML, like Gecko\) Chrome/2(.)+ Safari/(.)+', ), 'Chrome 3.x' => array ( '^(.)+ AppleWebKit/(.)+ \(KHTML, like Gecko\) Chrome/3(.)+ Safari/(.)+', ), 'Chrome 4.x' => array ( '^(.)+ AppleWebKit/(.)+ \(KHTML, like Gecko\) Chrome/4(.)+ Safari/(.)+', ), 'Chrome 5.x' => array ( '^(.)+ AppleWebKit/(.)+ \(KHTML, like Gecko\) Chrome/5(.)+ Safari/(.)+', ), ), 'Konqueror' => array ( 'Konqueror 1.x' => array ( '^(.)+Konqueror(.)+', ), 'Konqueror 2.x' => array ( '^(.)+Konqueror/2(.)+', ), 'Konqueror 3.x' => array ( '^(.)+Konqueror/3(.)+', ), 'Konqueror 4.x' => array ( '^(.)+Konqueror/4(.)+', ), ), 'Netscape Navigator' => array ( 'Netscape 2.x' => array ( '^Mozilla/2\.(\d)+\((.)+\)$', ), 'Netscape 3.x' => array ( '^Mozilla/3\.(\d)+\((.)+\)$', ), 'Netscape 4.x' => array ( '^Mozilla/4\.(\d)+\((.)+\)$', ), 'Netscape 6.x' => array ( '^Mozilla/5\.0(.)*Netscape6/6\.(.)+', ), 'Netscape 7.x' => array ( '^Mozilla/5\.0(.)*Netscape*/7\.(.)+', ), ), 'FireFox' => array ( 'FireFox 1.x' => array ( '^(.)*Firefox/1(.)+', ), 'FireFox 2.x' => array ( '^(.)*Firefox/2(.)+', ), 'FireFox 3.x' => array ( '^(.)*Firefox/3(.)+', ), ), 'Opera' => array ( 'Opera 4.x' => array ( '^(.)+Opera 4\.(.)+', ), 'Opera 5.x' => array ( '^(.)+Opera 5\.(.)+', ), 'Opera 6.x' => array ( '^(.)+Opera 6\.(.)+', '^Opera/6\.(.)*', ), 'Opera 7.x' => array ( '^Mozilla/(.)*Opera 7\.(.)+', '^Opera/7\.(.)+', ), 'Opera 8.x' => array ( '(.)*Opera 8\.(.)+', '(.)*Opera/8\.(.)+', ), 'Opera 9.x' => array ( '(.)*Opera/9\.(.)+', ), 'Opera 10.x' => array ( '(.)*Opera/10\.(.)+', ), ), 'Internet Explorer' => array ( 'IE 3.x' => array ( '^Mozilla/2\.0 \(compatible; MSIE 3\.(.)+', ), 'IE 4.x' => array ( '^Mozilla/4\.0 \(compatible; MSIE 4\.(.)+', ), 'IE 5.x' => array ( '^Mozilla/4\.0 \(compatible; MSIE 5\.(.)+', ), 'IE 6.x' => array ( '^Mozilla/.\.0 \(compatible; MSIE 6\.(.)+', ), 'IE 7.x' => array ( '^Mozilla/.\.0 \(compatible; MSIE 7\.(.)+', ), 'IE 8.x' => array ( '^Mozilla/.\.0 \(compatible; MSIE 8\.0(.)+Trident/4\.0(.)+', ), ), 'Safari' => array ( 'Safari 4.x' => array ( '^(.)+ AppleWebKit/(.)+ \(KHTML, like Gecko\) Version/4(.)+ Safari(.)+', ), 'Safari 3.x' => array ( '^(.)+ AppleWebKit/(.)+ \(KHTML, like Gecko\) Version/3(.)+ Safari(.)+', ), ), 'SeaMonkey' => array ( 'SeaMonkey 1.x' => array ( '^Mozilla(.)+ Gecko(.)+ SeaMonkey/1(.)+', ), ), 'WebCopier' => array ( 'WebCopier 5.x' => array ( '^WebCopier v5\.0$', ), ), ); $CurrentAgentCap = $_SERVER['HTTP_USER_AGENT']; foreach ( $BrowsCaps as $Group => $Agents ) foreach ( $Agents as $Agent => $AgentCaps ) { foreach ( $AgentCaps as $Cap ) { if ( ereg ( $Cap, $CurrentAgentCap ) ) { $GroupName = $Group; $AgentName = $Agent; break; } } if ( !empty ( $BrowserName ) ) break; } return empty ( $BrowserName ) ? false : true; }