Alex Rivera | Logout

reliable user browser detection with php

Asked 2010-02-13T13:06:20.217
41

Trying to detect a user's browser with PHP only, is $_SERVER['HTTP_USER_AGENT'] a reliable way? Should I instead opt for the get_browser function? which one do you find brings more precise results?

If this method is pragmatic, is it ill advised to use it for outputting pertinent CSS links, for example:

if(stripos($_SERVER['HTTP_USER_AGENT'],"mozilla")!==false)
   echo '<link type="text/css" href="mozilla.css" />';

I noticed this question, however I wanted to clarify whether this is good for CSS-oriented detection.

UPDATE: something really suspicious: I tried echo $_SERVER['HTTP_USER_AGENT']; on IE 7 and this is what it output:

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30618)

Safari gave something weird with "mozilla" in it too. What gives?

Edit
Report

1 Answer

4

if stripos($_SERVER['HTTP_USER_AGENT'],"mozilla")!==false)

That's not a useful test, almost every browser identifies itself as Mozilla.

is $_SERVER['HTTP_USER_AGENT'] a reliable way?

No.

Should I instead opt for the get_browser function?

No.

Browser-sniffing on the server side is a losing game. Apart from all the issues of trying to parse the UA string, the browsers that lie, the obscure browsers, and the possibility the header isn't there at all, if you return different page content for a different browser you must set the Vary header to include User-Agent, otherwise caching proxies may return the wrong version of the page to the wrong browser.

But if you add Vary: User-Agent IE's broken caching code gets confused and reloads the page every time. So you can't win.

If you must browser-sniff, the place to do it is on the client side, using JavaScript and, specifically in IE's case, conditional comments. It's lucky that it's IE that supports conditional comments, since that's the one browser you often need workarounds for. (See scunliffe's answer for the most common strategy.)

answered 2010-02-13T13:39:57.763

Your Answer