Avatar billede kaspernygaard Nybegynder
20. februar 2010 - 18:14 Der er 13 kommentarer og
1 løsning

Tjek af browser+version m. PHP

Hej,

Hvordan tjekker jeg, hvilken browser - og version af denne - en besøgende anvender vha. PHP?


Mvh
Kasper
Avatar billede michael_stim Ekspert
20. februar 2010 - 18:41 #1
<?php
echo $_SERVER['HTTP_USER_AGENT'];
?>
Avatar billede kaspernygaard Nybegynder
20. februar 2010 - 18:51 #2
Ja, men jeg vil gerne lave et tjek ala:

If(IE-version < 7) {
Avatar billede michael_stim Ekspert
20. februar 2010 - 19:40 #3

<?php
function browser_info($agent=null) {
  // Declare known browsers to look for
  $known = array('msie', 'firefox', 'safari', 'webkit', 'opera', 'netscape',
    'konqueror', 'gecko');

  // Clean up agent and build regex that matches phrases for known browsers
  // (e.g. "Firefox/2.0" or "MSIE 6.0" (This only matches the major and minor
  // version numbers.  E.g. "2.0.0.6" is parsed as simply "2.0"
  $agent = strtolower($agent ? $agent : $_SERVER['HTTP_USER_AGENT']);
  $pattern = '#(?<browser>' . join('|', $known) .
    ')[/ ]+(?<version>[0-9]+(?:\.[0-9]+)?)#';

  // Find all phrases (or return empty array if none found)
  if (!preg_match_all($pattern, $agent, $matches)) return array();

  // Since some UAs have more than one phrase (e.g Firefox has a Gecko phrase,
  // Opera 7,8 have a MSIE phrase), use the last one found (the right-most one
  // in the UA).  That's usually the most correct.
  $i = count($matches['browser'])-1;
  return array($matches['browser'][$i] => $matches['version'][$i]);
}

$ua = browser_info();
print_r($ua);
?>

This returns an array with the detected browser as the key, and the version as
the value, and also sets 'browser' and 'version' keys.  For example on Firefox
3.5:
Taget fra php.net
Avatar billede michael_stim Ekspert
20. februar 2010 - 19:52 #4
Denne her er taget fra samme sted:


<?php
class Browser
{
    private $props    = array("Version" => "0.0.0",
                                "Name" => "unknown",
                                "Agent" => "unknown") ;

    public function __Construct()
    {
        $browsers = array("firefox", "msie", "opera", "chrome", "safari",
                            "mozilla", "seamonkey",    "konqueror", "netscape",
                            "gecko", "navigator", "mosaic", "lynx", "amaya",
                            "omniweb", "avant", "camino", "flock", "aol");

        $this->Agent = strtolower($_SERVER['HTTP_USER_AGENT']);
        foreach($browsers as $browser)
        {
            if (preg_match("#($browser)[/ ]?([0-9.]*)#", $this->Agent, $match))
            {
                $this->Name = $match[1] ;
                $this->Version = $match[2] ;
                break ;
            }
        }
    }

    public function __Get($name)
    {
        if (!array_key_exists($name, $this->props))
        {
            die ("No such property or function $name");
        }
        return $this->props[$name] ;
    }

    public function __Set($name, $val)
    {
        if (!array_key_exists($name, $this->props))
        {
            SimpleError("No such property or function.", "Failed to set $name", $this->props) ;
            die ;
        }
        $this->props[$name] = $val ;
    }

}

$browser = new Browser ;
echo $browser->Name." ". $browser->Version."<br>" ;
if($browser->Name == 'firefox' && $browser->Version <= 3.6){
  echo "Din browser er gammel.";
}
?>
Avatar billede preppydude Nybegynder
20. februar 2010 - 20:12 #5
Vil du have mere information, kan du se på PHPs get_browser() funktion og det her projekt:
http://code.google.com/p/phpbrowscap/

http://php.net/manual/en/function.get-browser.php
Avatar billede coderdk Praktikant
20. februar 2010 - 23:05 #6
Hvis du går op i detaljer, kan jeg anbefale preppydudes kommentar - browscap er nice ;)
Avatar billede michael_stim Ekspert
20. februar 2010 - 23:57 #7
Kræver vist at man har adgang til ini filen.
Avatar billede michael_stim Ekspert
20. februar 2010 - 23:58 #8
Altså get_browser().
Avatar billede preppydude Nybegynder
21. februar 2010 - 00:40 #9
Man kunne også bare bruge ini_set()
Avatar billede coderdk Praktikant
21. februar 2010 - 04:25 #10
Check get_browser - måske understøtter dit webhotel det allerede.
browscap.ini er PHP_INI_SYSTEM, så du kan ikke bruge ini_set, den skal rettes i php.ini.

phpBrowscap som preppydude linker til, er stand-alone, så den kan man godt bruge ;)
Avatar billede michael_stim Ekspert
21. februar 2010 - 08:50 #11
Øhhh, hvorfor ikke bare bruge den klasse jeg allerede har givet? Han spørger om version og navn, og det får han.
kaspernygaard>>Kunne du bruge det, så lægger du bare et svar og accepterer det selv.
Avatar billede kaspernygaard Nybegynder
21. februar 2010 - 09:22 #12
michael_stim> Tusind tak! Det var præcis den sidste funktion du postede som jeg søgte :) Opretter du et svar, så overfører jeg point!
Avatar billede michael_stim Ekspert
21. februar 2010 - 09:27 #13
Samler ikke, ellers tak.
Avatar billede kaspernygaard Nybegynder
21. februar 2010 - 13:58 #14
Svar!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester