note 107005 added to function.get-browser
| From: | meduza at osu1 dot php dot net | Date: | Tue, 27 Dec 2011 21:48:24 +0000 |
| Subject: | note 107005 added to function.get-browser | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-185258@lists.php.net to get a copy of this message | ||
I stopped trying to detect the browser name and the browser's version, due to the non standard
user-agents, is impossible to cover all the possible browsers, and cover only the most used ones is
not good.
I only detect the platform, the engine and the version, that cover a lot of possible browsers and
let me code based on that, for example, the engine gecko, covers firefox, seamonkey and all the
gecko based browsers.
this is a example piece of code taken from my own, is maybe incomplete but as example is good, to
detect the engines.
<?php
/****** browser engine detection **************/
//browsers
define("UNKNOWN", 0);
define("TRIDENT", 1);
define("GECKO", 2);
define("PRESTO", 3);
define("WEBKIT", 4);
define("VALIDATOR", 5);
define("ROBOTS", 6);
if(!isset($_SESSION["info"]['browser'])) {
$_SESSION["info"]['browser']['engine'] = UNKNOWN;
$_SESSION["info"]['browser']['version'] = UNKNOWN;
$_SESSION["info"]['browser']['platform'] = 'Unknown';
$navigator_user_agent = ' ' . strtolower($_SERVER['HTTP_USER_AGENT']);
if (strpos($navigator_user_agent, 'linux')) :
$_SESSION["info"]['browser']['platform'] = 'Linux';
elseif (strpos($navigator_user_agent, 'mac')) :
$_SESSION["info"]['browser']['platform'] = 'Mac';
elseif (strpos($navigator_user_agent, 'win')) :
$_SESSION["info"]['browser']['platform'] = 'Windows';
endif;
if (strpos($navigator_user_agent, "trident")) {
$_SESSION["info"]['browser']['engine'] = TRIDENT;
$_SESSION["info"]['browser']['version'] =
floatval(substr($navigator_user_agent, strpos($navigator_user_agent, "trident/") + 8, 3));
}
elseif (strpos($navigator_user_agent, "webkit")) {
$_SESSION["info"]['browser']['engine'] = WEBKIT;
$_SESSION["info"]['browser']['version'] =
floatval(substr($navigator_user_agent, strpos($navigator_user_agent, "webkit/") + 7, 8));
}
elseif (strpos($navigator_user_agent, "presto")) {
$_SESSION["info"]['browser']['engine'] = PRESTO;
$_SESSION["info"]['browser']['version'] =
floatval(substr($navigator_user_agent, strpos($navigator_user_agent, "presto/") + 6, 7));
}
elseif (strpos($navigator_user_agent, "gecko")) {
$_SESSION["info"]['browser']['engine'] = GECKO;
$_SESSION["info"]['browser']['version'] =
floatval(substr($navigator_user_agent, strpos($navigator_user_agent, "gecko/") + 6, 9));
}
elseif (strpos($navigator_user_agent, "robot"))
$_SESSION["info"]['browser']['engine'] = ROBOTS;
elseif (strpos($navigator_user_agent, "spider"))
$_SESSION["info"]['browser']['engine'] = ROBOTS;
elseif (strpos($navigator_user_agent, "bot"))
$_SESSION["info"]['browser']['engine'] = ROBOTS;
elseif (strpos($navigator_user_agent, "crawl"))
$_SESSION["info"]['browser']['engine'] = ROBOTS;
elseif (strpos($navigator_user_agent, "search"))
$_SESSION["info"]['browser']['engine'] = ROBOTS;
elseif (strpos($navigator_user_agent, "w3c_validator"))
$_SESSION["info"]['browser']['engine'] = VALIDATOR;
elseif (strpos($navigator_user_agent, "jigsaw"))
$_SESSION["info"]['browser']['engine'] = VALIDATOR;
echo "<pre>\n\nEngine detected:
".$_SESSION["info"]['browser']['engine'];
switch($_SESSION["info"]['browser']['engine']) {
case UNKNOWN: echo " (unknown)";
break;
case TRIDENT: echo " (trident)";
break;
case GECKO: echo " (gecko)";
break;
case PRESTO: echo " (presto)";
break;
case WEBKIT: echo " (Webkit)";
break;
case VALIDATOR: echo " (validator)";
break;
case ROBOTS: echo " (robot)";
}
echo "\nEngine version:
".$_SESSION["info"]['browser']['version'];
echo "\nPlataform detected:
".$_SESSION["info"]['browser']['platform'];
echo " \n\n</pre>";
?>
PD: you can add more engines and use an array, I just removed that and put the most popular engines
as example, and used elseif instead, this code maybe have errors because is just an example.
----
Server IP: 64.71.164.2
Probable Submitter: 97.101.91.234
----
Manual Page -- http://www.php.net/manual/en/function.get-browser.php
Edit -- https://master.php.net/note/edit/107005
Del: integrated -- https://master.php.net/note/delete/107005/integrated
Del: useless -- https://master.php.net/note/delete/107005/useless
Del: bad code -- https://master.php.net/note/delete/107005/bad+code
Del: spam -- https://master.php.net/note/delete/107005/spam
Del: non-english -- https://master.php.net/note/delete/107005/non-english
Del: in docs -- https://master.php.net/note/delete/107005/in+docs
Del: other reasons-- https://master.php.net/note/delete/107005
Reject -- https://master.php.net/note/reject/107005
Search -- https://master.php.net/manage/user-notes.php