How can I detect Opera with PHP? Im using lightbox with drupal and their is a bug in opera, so if the site is being viewed with opera I want to print a normal link instead of the lightbox.
I found this link but it just says 'other browser' not opera: http://drupal.org/node/65903
This prints the browser being used and seems to work fine:
<?php echo $_SERVER['HTTP_USER_AGENT']; ?>
So can I modify the code to print something if the browser is opera? If so, are their any pit falls to this method?
Thanks
You could try using http://chrisschuld.com/projects/browser-php-detecting-a-users-browser-from-php/, it looks like an useful script, however, if that PHP code you entered is echoing something you can use to change how the link is rendered, then that might be fine. The only thing is that you should use a some loose string comparison, not a strict one, because Opera's user agents might change between versions or operating systems.
Yes, you can modify the code. Just use what Opera is giving you for $_SERVER['HTTP_USER_AGENT']
to make the right change.
As far as pitfalls go, remember that people can change their user agent. Some applications will change your browser's user agent as well. So user agent sniffing isn't a surefire way to guarantee compatibility ... in reality, you'd be better checking for specific browser capabilities on the front end rather than checking on the server side. But if you're stuck doing this in PHP, you're on the right track.
Check this link. Down in the comments, somebody posted the following code:
<?php
function getBrowser()
{
$u_agent = $_SERVER['HTTP_USER_AGENT'];
$bname = 'Unknown';
$platform = 'Unknown';
$version= "";
//First get the platform?
if (preg_match('/linux/i', $u_agent)) {
$platform = 'linux';
}
elseif (preg_match('/macintosh|mac os x/i', $u_agent)) {
$platform = 'mac';
}
elseif (preg_match('/windows|win32/i', $u_agent)) {
$platform = 'windows';
}
// Next get the name of the useragent yes seperately and for good reason
if(preg_match('/MSIE/i',$u_agent) && !preg_match('/Opera/i',$u_agent))
{
$bname = 'Internet Explorer';
$ub = "MSIE";
}
elseif(preg_match('/Firefox/i',$u_agent))
{
$bname = 'Mozilla Firefox';
$ub = "Firefox";
}
elseif(preg_match('/Chrome/i',$u_agent))
{
$bname = 'Google Chrome';
$ub = "Chrome";
}
elseif(preg_match('/Safari/i',$u_agent))
{
$bname = 'Apple Safari';
$ub = "Safari";
}
elseif(preg_match('/Opera/i',$u_agent))
{
$bname = 'Opera';
$ub = "Opera";
}
elseif(preg_match('/Netscape/i',$u_agent))
{
$bname = 'Netscape';
$ub = "Netscape";
}
// finally get the correct version number
$known = array('Version', $ub, 'other');
$pattern = '#(?<browser>' . join('|', $known) .
')[/ ]+(?<version>[0-9.|a-zA-Z.]*)#';
if (!preg_match_all($pattern, $u_agent, $matches)) {
// we have no matching number just continue
}
// see how many we have
$i = count($matches['browser']);
if ($i != 1) {
//we will have two since we are not using 'other' argument yet
//see if version is before or after the name
if (strripos($u_agent,"Version") < strripos($u_agent,$ub)){
$version= $matches['version'][0];
}
else {
$version= $matches['version'][1];
}
}
else {
$version= $matches['version'][0];
}
// check if we have a number
if ($version==null || $version=="") {$version="?";}
return array(
'userAgent' => $u_agent,
'name' => $bname,
'version' => $version,
'platform' => $platform,
'pattern' => $pattern
);
}
?>
So you could say something like:
$browser = getBrowser();
if($browser['name'] == "Opera")
{
echo "This is opera!";
}