note 123473 added to function.get-browser
| From: | Anonymous@php.net | Date: | Fri, 28 Dec 2018 12:45:59 +0000 |
| Subject: | note 123473 added to function.get-browser | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-209956@lists.php.net to get a copy of this message | ||
Follow up to Francesco R's post from 2016.
His function works for most human traffic; added a few lines to cover the most common bot traffic.
Also fixed issue with function failing to detect strings at position 0 due to strpos behavior.
<?php
// Function written and tested December, 2018
function get_browser_name($user_agent)
{
// Make case insensitive.
$t = strtolower($user_agent);
// If the string *starts* with the string, strpos returns 0 (i.e., FALSE). Do a ghetto hack
and start with a space.
// "[strpos()] may return Boolean FALSE, but may also return a non-Boolean value which
evaluates to FALSE."
// http://php.net/manual/en/function.strpos.php
$t = " " . $t;
// Humans / Regular Users
if (strpos($t, 'opera' ) || strpos($t, 'opr/') ) return
'Opera' ;
elseif (strpos($t, 'edge' ) ) return
'Edge' ;
elseif (strpos($t, 'chrome' ) ) return
'Chrome' ;
elseif (strpos($t, 'safari' ) ) return
'Safari' ;
elseif (strpos($t, 'firefox' ) ) return
'Firefox' ;
elseif (strpos($t, 'msie' ) || strpos($t, 'trident/7')) return
'Internet Explorer';
// Search Engines
elseif (strpos($t, 'google' ) ) return '[Bot]
Googlebot' ;
elseif (strpos($t, 'bing' ) ) return '[Bot]
Bingbot' ;
elseif (strpos($t, 'slurp' ) ) return '[Bot]
Yahoo! Slurp';
elseif (strpos($t, 'duckduckgo') ) return '[Bot]
DuckDuckBot' ;
elseif (strpos($t, 'baidu' ) ) return '[Bot]
Baidu' ;
elseif (strpos($t, 'yandex' ) ) return '[Bot]
Yandex' ;
elseif (strpos($t, 'sogou' ) ) return '[Bot]
Sogou' ;
elseif (strpos($t, 'exabot' ) ) return '[Bot]
Exabot' ;
elseif (strpos($t, 'msn' ) ) return '[Bot]
MSN' ;
// Common Tools and Bots
elseif (strpos($t, 'mj12bot' ) ) return '[Bot]
Majestic' ;
elseif (strpos($t, 'ahrefs' ) ) return '[Bot]
Ahrefs' ;
elseif (strpos($t, 'semrush' ) ) return '[Bot]
SEMRush' ;
elseif (strpos($t, 'rogerbot' ) || strpos($t, 'dotbot') ) return
'[Bot] Moz or OpenSiteExplorer';
elseif (strpos($t, 'frog' ) || strpos($t, 'screaming')) return
'[Bot] Screaming Frog';
// Miscellaneous
elseif (strpos($t, 'facebook' ) ) return '[Bot]
Facebook' ;
elseif (strpos($t, 'pinterest' ) ) return '[Bot]
Pinterest' ;
// Check for strings commonly used in bot user agents
elseif (strpos($t, 'crawler' ) || strpos($t, 'api' ) ||
strpos($t, 'spider' ) || strpos($t, 'http' ) ||
strpos($t, 'bot' ) || strpos($t, 'archive') ||
strpos($t, 'info' ) || strpos($t, 'data' ) ) return
'[Bot] Other' ;
return 'Other (Unknown)';
}
?>
Post with more depth here:
https://www.256kilobytes.com/content/show/1922/how-to-parse-a-user-agent-in-php-with-minimal-effort
----
Server IP: 209.126.17.76
Probable Submitter: 104.153.200.240
----
Manual Page -- http://php.net/manual/en/function.get-browser.php
Edit -- https://master.php.net/note/edit/123473
Del: integrated -- https://master.php.net/note/delete/123473/integrated
Del: useless -- https://master.php.net/note/delete/123473/useless
Del: bad code -- https://master.php.net/note/delete/123473/bad+code
Del: spam -- https://master.php.net/note/delete/123473/spam
Del: non-english -- https://master.php.net/note/delete/123473/non-english
Del: in docs -- https://master.php.net/note/delete/123473/in+docs
Del: other reasons-- https://master.php.net/note/delete/123473
Reject -- https://master.php.net/note/reject/123473
Search -- https://master.php.net/manage/user-notes.php