note 123473 added to function.get-browser

From: 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

« previous php.notes (#209956) next »