All pastes #515204 Raw Edit

Someone

public php v1 · immutable
#515204 ·published 2007-05-28 02:50 UTC
rendered paste body
<?php  # written by: Daniel van Eeden <daniel_e@dds.nl>  # function: detects browsers and more  # homepage: http://compukid.no-ip.org/dev/  # version: 2.4    # contributors:  # sebas@vizzzion.com (OO stuff, test() method, windows languange detection)  # people posting in http://gathering.tweakers.net/forum/list_messages/631952/  # Copyright (C) 2003 Daniel van Eeden  # This program is free software; you can redistribute it and/or modify  # it under the terms of the GNU General Public License as published by  # the Free Software Foundation; either version 2 of the License, or  # (at your option) any later version.  #  # This program is distributed in the hope that it will be useful,  # but WITHOUT ANY WARRANTY; without even the implied warranty of  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  # GNU General Public License for more details.  # You should have received a copy of the GNU General Public License  # along with this program; if not, write to the Free Software  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA    class Browser {    var $os; 		  // Operating System (Linux, Solaris, Windows)    var $arch; 		  // Architecure (i386, PPC)    var $browser;    var $browser_ver; 	  // Browser version    var $browser_subver;  // Browser subversion    var $browser_sup;    var $lang; 		  // language (en_US, nl_NL, ru_RU)    var $encryption; 	  // SSL encryption    var $agentstring; 	  // HTTP useragent string    var $http_lang;       // HTTP accept language    var $remote_ip;    var $render_eng; 	  // render engine (Gecko, KHTML)    var $render_eng_ver;  // render engine version    var $moz_release;	  // mozilla release    function Browser() {      global $teststring;      if ($teststring != "" ) {        $agentstring = $teststring;        $testwarn = "yes";      } else {        $agentstring = $_SERVER['HTTP_USER_AGENT'];      }      $http_lang = $_SERVER['HTTP_ACCEPT_LANGUAGE'];      # get some values from the $HTTP_USER_AGENT variables      $luser_agent0=explode("(",$agentstring);      $luser_agent1=explode(")",$luser_agent0[1]);      $luser_agent2=explode(";",$luser_agent1[0]);      // for debugging purpose      // print $luser_agent0[0] . ' | ' . $luser_agent1[0] . ' | ' . $luser_agent2[0];      $chkvers=explode("/",$luser_agent0[0]);      $ns4_minvers=explode(".",$chkvers[1]);      $moz_extra_ver=explode(" ",$agentstring);      $moz_extra_ver1=explode("/",$moz_extra_ver[8]);      $moz_extra_ver2=explode("/",$moz_extra_ver[7]);      $moz_extra_ver3=explode("/",$moz_extra_ver[6]);      $moz_extra_ver4=explode("/",$moz_extra_ver[5]);      $moz_rv=explode(":",$luser_agent2[4]);      # Which operating systems do we want to detect?       # How do we want to call them?      $det_os = array (        array("Linux","Linux"), // Some prefer "GNU/Linux"        array("FreeBSD","FreeBSD"),        array("OpenBSD","OpenBSD"),        array("NetBSD","NetBSD"),	array("Windows 2000","Windows","2000","Microsoft"),	array("Windows NT 5.0","Windows","2000","Microsoft"),        array("Windows NT 5.1","Windows","XP","Microsoft"),        array("Windows NT 5.2","Windows","2003","Microsoft"),        array("Windows NT","Windows","NT 4.0","Microsoft"),        array("Windows XP","Windows","XP","Microsoft"),        array("Windows 95","Windows","95","Microsoft"),        array("Windows 98","Windows","98","Microsoft"),        array("Windows ME","Windows","ME","Microsoft"),        array("WinNT4.0","Windows","NT 4.0","Microsoft"),        array("Win98","Windows","98","Microsoft"),        array("Win95","Windows","95","Microsoft"),        array("mac os x","MacOS","X","Apple"),        array("Mac OS X","MacOS","X","Apple"),        array("MacOS X","MacOS","X","Apple"),        array("Mac_PowerPC","MacOS","","Apple"),        array("Macintosh","MacOS","","Apple"),        array("macintosh","MacOS","","Apple"),	array("OS/2","OS/2","","IBM"),	array("SunOS 5.7","Solaris","5.7","Sun"),	array("SunOS 5.8","Solaris","5.8","Sun"),	array("SunOS 5.9","Solaris","5.9","Sun"),	array("SunOS","Solaris","","Sun"),	array("AIX","AIX","","IBM"),	array("HP-UX","HP-UX","","HP"),	array("IRIX","IRIX","","Sgi"),	array("BeOS","BeOS","","Be"),	array("Unix","UNIX","",""),	array("UNIX","UNIX","",""),	array("unix_sv","UNIX","","SCO"),	array("X11","UNIX","","")      );            # wich architectures do we like to detect?      $det_arch[0][0]="i386";      $det_arch[0][1]="i386";      $det_arch[1][0]="i486";      $det_arch[1][1]="i486";      $det_arch[2][0]="i586";      $det_arch[2][1]="i586";      $det_arch[3][0]="i686";      $det_arch[3][1]="i686";      $det_arch[4][0]="PPC";      $det_arch[4][1]="PowerPC";      $det_arch[5][0]="sun4u";      $det_arch[5][1]="UltraSPARC";      $det_arch[6][0]="sun4m";      $det_arch[6][1]="MicroSPARC";      $det_arch[7][0]="PPC64";      $det_arch[7][1]="PowerPC64";      $det_arch[7][0]="ARM";      $det_arch[7][1]="ARM";      $det_arch[7][0]="IA64";      $det_arch[7][1]="Itanium";      $det_arch[7][0]="x86-64";      $det_arch[7][1]="x86-64";      $det_arch[7][0]="PA-RISC";      $det_arch[7][1]="PA-RISC";      $det_arch[7][0]="Alpha";      $det_arch[7][1]="Alpha";      $det_arch[8][0]="ppc"; // used by Safari      $det_arch[8][1]="PowerPC";      $det_arch[9][0]="r4000";      $det_arch[9][1]="MIPS";      $det_arch[10][0]="sparc64";      $det_arch[10][1]="UltraSPARC";      $det_arch[11][0]="9000";      $det_arch[11][1]="PA-RISC";      $det_arch[12][0]="Mac_PowerPC";      $det_arch[12][1]="PowerPC";      #####################      ##### FUNCTIONS #####      #####################      # function to give the $arch variable the right string.      # $arg1 is where to look.      # $arg2 is the list we want to search with.      function testarch ($arg1,$arg2)      {        for ($i = 0; $i <= sizeof($arg2); $i++){          if ((strpos($arg1,$arg2[$i][0])) || ($arg1 == $arg2[$i][0])){            $arch=$arg2[$i][1];	    return $arch;          }        }      }        # function to give the $os variable the right string.      # $arg1 is where to look.      # $arg2 is the list we want to search with.      function testos ($arg1,$arg2)      {        for ($i = 0; $i <= sizeof($arg2); $i++){          if ((strpos($arg1,$arg2[$i][0])) || ($arg1 == $arg2[$i][0])){            $os=$arg2[$i][1];	    if ($arg2[$i][2] != ""){	      $os_ver=$arg2[$i][2];	    }	    if ($arg2[$i][3] != ""){	      $os_vendor=$arg2[$i][3];	    }	    return array($os,$os_ver,$os_vendor);          }        }      }        # function to give the $encryption variable the right string.      # $arg1 is where to look      function testencryption ($arg1)      {        switch ($arg1) {          case " I":            $encryption="weak";	    return($encryption);          case " U":            $encryption="strong";	    return($encryption);        }      }       #########################      ##### detect Safari #####      #########################      $safari_ver=explode("/",$moz_extra_ver[11]);      $safari_ver1=explode("/",$moz_extra_ver[12]);      if (($safari_ver[0] == "safari") || ($safari_ver1[0] == "Safari")){        $browser="Safari";	$browser_ver=$safari_ver[1];	if ($browser_ver == NULL) $browser_ver=$safari_ver1[1];	$arch=testarch($moz_extra_ver[3],$det_arch);	if ($arch == NULL) $arch=testarch($moz_extra_ver[2],$det_arch);	$os=testos($luser_agent2[2],$det_os);	$render_eng="KHTML";        $encryption=testencryption($luser_agent2[1]);      #################################################      ##### detect Mozilla, Netscape6+ or Phoenix #####      #################################################      } elseif (($chkvers[0] == "Mozilla") && ($chkvers[1] == "5.0 ") && ($luser_agent2[0] != "compatible") && ($moz_extra_ver3[0] != "Galeon")){        # Firebird detection        $fbird_extra_ver1=explode("/",$moz_extra_ver[10]);	if ($fbird_extra_ver1[0] == "Firebird") {	  $browser = "Firebird";	  $browser_ver = $fbird_extra_ver1[1];	  $render_eng = $moz_extra_ver1[0];	  $render_eng_ver = $moz_extra_ver1[1];	}        # Phoenix detection        $phoenix_extra_ver1=explode("/",$moz_extra_ver[9]);	if ($phoenix_extra_ver1[0] == "Phoenix") {	  $browser = "Phoenix";	  $browser_ver = $phoenix_extra_ver1[1];	  $render_eng = $moz_extra_ver1[0];	  $render_eng_ver = $moz_extra_ver1[1];	}	# give the $os variable the right string.	$os=testos($luser_agent2[2],$det_os);        if (($os == NULL) && ($luser_agent2[0] == "Macintosh")){          $os[0]="MacOS";        }        # give the $arch variable the right string.        $arch=testarch($luser_agent2[2],$det_arch);	# Detect Netscape and Phoenix        switch ($moz_extra_ver1[0]) {          case "Netscape":            $browser="Netscape";            $browser_ver=$moz_extra_ver1[1];	    $moz_release=$moz_rv[1];	    break;          case "Netscape6":            $browser="Netscape";	    $browser_ver=$moz_extra_ver1[1];	    $moz_release=$moz_rv[1];            break;          case "Phoenix":            $browser="Phoenix";            $browser_ver=$moz_extra_ver1[1];	    $moz_release=$moz_rv[1];	    break;          default:case "Netscape":            $browser="Netscape";            $browser_ver=$moz_extra_ver1[1];	    $moz_release=$moz_rv[1];	    break;          case "Netscape6":            $browser="Netscape";	    $browser_ver=$moz_extra_ver1[1];	    $moz_release=$moz_rv[1];            break;          case "Epiphany":            $browser="Epiphany";            $browser_ver=$moz_extra_ver1[1];	    $moz_release=$moz_rv[1];	    break;          default:	    switch ($moz_extra_ver2[0]) {	      case "Netscape":                $browser="Netscape";                $browser_ver=$moz_extra_ver2[1];	        $moz_release=$moz_rv[1];	        break;              case "Netscape6":                $browser="Netscape";	        $browser_ver=$moz_extra_ver2[1];	        $moz_release=$moz_rv[1];                break;              case "Phoenix":                $browser="Phoenix";                $browser_ver=$moz_extra_ver2[1];	        $moz_release=$moz_rv[1];	        break;              default:                if ($browser == "") {		  $browser="Mozilla";                  $browser_ver=$moz_rv[1];		}	        $moz_release=$moz_rv[1];	    }            }        if ($moz_extra_ver1[0] == "Debian") {	  $os[2]="Debian";          $browser_subver1=explode("-",$moz_extra_ver1[1]);	  $browser_subver=$browser_subver1[1];	  $browser_sup="Debian";	}        # give the $render_eng variable the right string.	if ($moz_extra_ver3[0] == "Gecko") {	  $render_eng="Gecko";	  $render_eng_ver=$moz_extra_ver3[1];	}	if ($moz_extra_ver2[0] == "Gecko") {	  $render_eng="Gecko";	  $render_eng_ver=$moz_extra_ver2[1];	}	if ($moz_extra_ver1[0] == "Gecko") {	  $render_eng="Gecko";	  $render_eng_ver=$moz_extra_ver1[1];	}        # give the $encryption the right string.        $encryption=testencryption($luser_agent2[1]);        # give the $lang array the right strings.        $lang1=explode("-",$luser_agent2[3]);        $lang[0]=$lang1[0];        if ($lang1[1] != NULL) $lang[1]=$lang1[1];        if (strpos($agentstring,"Opera")){          $browser="Opera";          $render_eng="Opera";          $arch=testarch($luser_agent2[0],$det_arch);	  $browser_ver=$moz_extra_ver[6];	  $render_eng_ver=$moz_extra_ver[6];          $os=testos($luser_agent2[0],$det_os);	}        }        #####################################################################      ##### detect Microsoft Internet Explorer and Opera in MSIE mode #####      #####################################################################      elseif (($chkvers[0] == "Mozilla") && ($chkvers[1] == "4.0 ") && ($luser_agent2[0] == "compatible") && (strpos($luser_agent2[1],"MSIE"))){        # detect Opera in MSIE mode        if (strpos($agentstring,"Opera")){          $browser="Opera";          $arch=testarch($luser_agent2[2],$det_arch);	  $os=testos($luser_agent2[2],$det_os);	  if ($os == NULL) {	    $os=testos($luser_agent2[3],$det_os);	  }	  $render_eng="Opera";	  if ($moz_extra_ver[9] != "Opera") { 	    if ($moz_extra_ver[9] != "") {	      if ($moz_extra_ver[6] == "Opera") {                $render_eng_ver=$moz_extra_ver[7];	        $browser_ver=$moz_extra_ver[7];              } else {                $render_eng_ver=$moz_extra_ver[9];	        $browser_ver=$moz_extra_ver[9];              }	    } else {	      if ($moz_extra_ver[5] == "Opera") {                $render_eng_ver=$moz_extra_ver[6];	        $browser_ver=$moz_extra_ver[6];              } else {	        $render_eng_ver=$moz_extra_ver[8];	        $browser_ver=$moz_extra_ver[8];	      }             }	  } else { 	    $render_eng_ver=$moz_extra_ver[10];	    $browser_ver=$moz_extra_ver[10];          }        } else {            $browser="Internet Explorer";          $render_eng="MSIE";	  $msie_ver=explode(" ",$luser_agent2[1]);          $render_eng_ver=$msie_ver[2];          $browser_ver=$msie_ver[2];          $arch=testarch($luser_agent2[2],$det_arch);  // in case of MacOS	  if ($moz_rv[0] == " TUCOWS"){	    $browser_sup="Tucows";	  }          if ($moz_extra_ver[4] == "AOL") {            $browser_sup="AOL";          }          switch ($moz_extra_ver[6]) {            case "AT&T":	      $browser_sup="AT&T";	      break;            case "Crazy":	      $browser="Crazy Browser";	      $crazy_ver=explode(")",$moz_extra_ver[8]);              $browser_ver=$crazy_ver[0];	      break;            case "Avant":	      $browser="Avant Browser";	      $browser_ver=NULL;	      break;          }          switch ($moz_extra_ver[7]) {            case "NetCaptor":	      $browser="NetCaptor";	      $netcap_ver=explode(")",$moz_extra_ver[8]);              $browser_ver=$netcap_ver[0];              break;            case "{Tiscali})":	      $browser_sup="Tiscali";	      break;            case "Feedreader;":	      $browser="Feedreader";	      $browser_ver=NULL;              break;            case "Avant":	      $browser="Avant Browser";	      $browser_ver=NULL;	      break; 	    case "MyIE2;":	      $browser="MyIE";	      $browser_ver="2";	      break;	    case "MyIE2)":	      $browser="MyIE";	      $browser_ver="2";	      break;	    case "BurntMail":	      $browser="BurntMail";	      $browser_ver=$moz_extra_ver[9];	      break;	    case "PCnet":	      $browser_sup="PCnet";	      break;	    case "FTDv3":	      $browser="FTD";	      $browser_ver="3";	      break;	  }          switch ($moz_extra_ver[8]) {            case "Wanadoo;";	      $browser_sup="Wanadoo";          }          # give the $os variable the right string.          $os=testos($luser_agent2[2],$det_os);          # detect the os if MSN or Compuserve is used.          if ($os[0] == NULL) $os=testos($luser_agent2[3],$det_os);        }      ############################      ##### detect konqueror #####      ############################      } elseif (($chkvers[0] == "Mozilla") && ($chkvers[1] == "5.0 ") && ($luser_agent2[0] == "compatible")){        $konq_vers=explode("/",$luser_agent2[1]);        if ($konq_vers[0] == " Konqueror") {          $browser="Konqueror";          $browser_ver=$konq_vers[1];	  $render_eng="KHTML";          $os=testos($luser_agent2[2],$det_os);          # Konqueror shows the kernel version, use it!          # probaly also usable for FreeBSD?          if (($os[0]=="Linux") || ($os[0]=="FreeBSD")){            $konq_os=explode(" ",$luser_agent2[2]);	    $os[1]=$konq_os[2];            if (strpos($konq_os[2],"gentoo")){	    $os[2]="Gentoo";	    }          }          # give the $arch variable the right string.          $arch=testarch($luser_agent2[4],$det_arch);          # give the $lang array the right strings.          $lang1=explode("-",$luser_agent2[5]);          $lang2=explode(",",$lang1[0]);          $lang3=explode("_",$lang2[0]);          $lang[0]=$lang3[0];          if ($lang3[1] != NULL) $lang[1]=$lang3[1];        } else {          $browser="Mozilla 5.0 compatible";        }        ###############################            ##### detect netscape 3.x #####      ###############################            } elseif (($chkvers[0] == "Mozilla") && ($ns4_minvers[0] == "3") && ($ns4_minvers[1] != "0 ")){        $browser="Netscape";        $render_eng="Netscape";        $ns3_minvers1=explode(" ",$ns4_minvers[1]);        $browser_ver="3.$ns3_minvers1[0]";        $render_eng_ver="3.$ns3_minvers1[0]";        $encryption=testencryption($luser_agent2[1]);        $os=testos($luser_agent2[2],$det_os);	$os[1]=$moz_extra_ver[4];        $arch=testarch($luser_agent2[2],$det_arch);      ###############################      ##### detect netscape 4.x #####      ###############################      } elseif (($chkvers[0] == "Mozilla") && ($ns4_minvers[0] == "4") && ($ns4_minvers[1] != "0 ")){        $ns4_minvers1=explode(" ",$ns4_minvers[1]);        if ($moz_extra_ver[6] == "BrowseX") {          $browser="BrowseX";          $browsex_ver=explode(" ",$luser_agent0[2]);          $browser_ver=$browsex_ver[0];          $os=testos($luser_agent0[2],$det_os);          $browsex_os_ver=explode(")",$moz_extra_ver[9]);          $os[1]=$browsex_os_ver[0];        } else {          $browser="Netscape";          $browser_ver="4.$ns4_minvers1[0]";          $arch=testarch($luser_agent2[2],$det_arch);          $os=testos($luser_agent2[2],$det_os);        }        $render_eng=$browser;        $render_eng_ver=$browser_ver;        $encryption=testencryption($luser_agent2[1]);        if ($os[0] == NULL) $os=testos($luser_agent2[0],$det_os);        # detect the language...        if ($http_lang == "") {	  $ns4_lang[0]="[en]";          $ns4_lang[1]="[nl]";          for ($i =0; $i <= sizeof($ns4_lang); $i++){            if (strpos($agentstring,$ns4_lang[$i])){              $lang[0]=$ns4_lang[$i];            }          }	}        if (strpos($agentstring,"Opera")) {          $browser="Opera";          $arch=testarch($luser_agent2[0],$det_arch);        }        #############################      ##### detect old galeon #####      #############################      } elseif (($chkvers[0] == "Mozilla") && ($chkvers[1] == "5.0 Galeon")){        $browser="Galeon";        $browser_ver=$chkvers[2];        $os=testos($luser_agent2[1],$det_os);        $arch=testarch($luser_agent2[1],$det_arch);        $encryption=testencryption($luser_agent2[2]);        $gal_extra_ver=explode(" ",$agentstring);        $gal_extra_ver1=explode("/",$gal_extra_ver[7]);	$render_eng=$moz_extra_ver3[0];	$render_eng_ver=$moz_extra_ver3[1];        if ($gal_extra_ver1[0] == "Debian"){          $os[2]="Debian";	  $browser_sup="Debian";          $browser_subver1=explode("-",$moz_extra_ver2[1]);	  $browser_subver=$browser_subver1[1];        }        #############################      ##### detect new galeon #####      #############################      } elseif ($moz_extra_ver3[0] == "Galeon") {        $browser ="Galeon";	$browser_ver=$moz_extra_ver3[1];	$os[0]=$moz_extra_ver[3];	$render_eng=$moz_extra_ver4[0];	$render_eng_ver=$moz_extra_ver4[1];     	$os=testos($luser_agent2[2],$det_os);     	$arch=testarch($luser_agent2[2],$det_arch);     	$encryption=testencryption($luser_agent2[1]);	if ($moz_extra_ver2[0] == "Debian") {	  $os[2]="Debian";	  $browser_sup="Debian";          $browser_subver1=explode("-",$moz_extra_ver2[1]);	  $browser_subver=$browser_subver1[1];	}           #######################      ##### detect Lynx #####      #######################      } elseif ($chkvers[0] == "Lynx") {        $browser="Lynx";        $render_eng="Lynx";        $lynx_ver=explode(" ",$chkvers[1]);        $browser_ver=$lynx_ver[0];        $render_eng_ver=$lynx_ver[0];      ###################################      ##### detect Links and ELinks #####      ###################################      } elseif (($chkvers[0] == "Links ") || ($chkvers[0] == "ELinks ")) {        switch ($chkvers[0]) {          case "Links ":            $browser="Links";            $render_eng="Links";	    break;          case "ELinks ":            $browser="ELinks";            $render_eng="ELinks";	    break;        }        $browser_ver=$luser_agent2[0];        $render_eng_ver=$luser_agent2[0];        $arch=testarch($luser_agent2[1],$det_arch);        $links_os=explode(" ",$luser_agent2[1]);        $os[0]=$links_os[1];        $os[1]=$links_os[2];        #######################      ##### detect java #####      #######################      } elseif ($chkvers[0] == "Java") {        $browser="Java";	$browser_ver=$chkvers[1];        $render_eng="Java";  	$render_eng_ver=$chkvers[1];      ######################      ##### detect w3m #####      ######################      } elseif ($chkvers[0] == "w3m") {        $browser="w3m";        $render_eng="w3m";        $browser_ver=$chkvers[1];        $render_eng_ver=$chkvers[1];        ##############################      ##### detect NCSA Mosaic #####      ##############################      } elseif (($chkvers[0] == "ncsa mosaic") || ($chkvers[0] == "NCSA_Mosaic")) {        $browser="NCSA Mosaic";        $render_eng="mosaic";	$mosaic_ver=explode(" ",$chkvers[1]);        $browser_ver=$mosaic_ver[0];        $render_eng_ver=$mosaic_ver[0];	$browser_sup="NCSA";        $arch=testarch($luser_agent2[1],$det_arch);        $mosaic_os=explode(" ",$luser_agent2[1]);        $os=testos($mosaic_os[0],$det_os);        $os[1]=$mosaic_os[1];        #######################################      ##### detect opera in native mode #####      #######################################      } elseif ($chkvers[0] == "Opera") {        $browser="Opera";        $render_eng="Opera";        $opera_browser_ver=explode(" ",$chkvers[1]);        $browser_ver=$opera_browser_ver[0];        $render_eng_ver=$opera_browser_ver[0];        $arch=testarch($luser_agent2[0],$det_arch);	$os=testos($luser_agent2[0],$det_os);	  if ($os[0] == "") {	    $os=testos($moz_extra_ver[1],$det_os);	    if ($os[0] == "Linux") {	      $os[1] = $moz_extra_ver[2];	    }	  }        $encryption=testencryption($luser_agent2[1]);      ########################      ##### detect fetch #####      ########################      } elseif ($moz_extra_ver[0] == "fetch") {        $browser=$moz_extra_ver[0];        $render_eng=$moz_extra_ver[0];        $else_browser_ver=explode(" ",$chkvers[1]);        $browser_ver=$else_browser_ver[0];        $render_eng_ver=$else_browser_ver[0];	      ########################      ##### detect other #####      ########################      } else {        $browser=$chkvers[0];        $render_eng=$chkvers[0];        $else_browser_ver=explode(" ",$chkvers[1]);        $browser_ver=$else_browser_ver[0];        $render_eng_ver=$else_browser_ver[0];      }        ######################################################      ##### detect language using HTTP_ACCEPT_LANGUAGE #####      ######################################################      # Windows seems to send a different HTTP_USER_AGENT, language detection does not work      # this code should workaround this, as IE sends HTTP_ACCEPT_LANGUAGE      # also useable for Lynx and w3m      if (($lang[0] == '') AND ($http_lang != '')) {        $lang[0] = substr($http_lang, 0, 2);        // $lang[0] = $http_lang; // this should return 'en-us' e.g.        $tmp  = substr($http_lang, 3, 2); // this only gives 'en' e.g.        if ($tmp = "q=") $tmp="";	if ($lang[1] == '') {          $lang[1] = $tmp;        }      }             // remote ip      $this -> remote_ip = $_SERVER["REMOTE_ADDR"];      $remote_ip = $this -> remote_ip;            #####################################################      ##### If they're not detected, they're unknown. #####      #####################################################      if ($browser == NULL) $browser="unknown";      if ($browser_ver == NULL) $browser_ver="unknown";      if ($browser_subver == NULL) $browser_subver="unknown";      if ($browser_sup == NULL) $browser_sup="unknown";      if ($encryption == NULL) $encryption="unknown";      if ($os[0] == NULL) $os[0]="unknown";      if ($os[1] == NULL) $os[1]="unknown";      if ($os[2] == NULL) $os[2]="unknown";      if ($lang[0] == NULL) $lang[0]="unknown";      if ($lang[1] == NULL) $lang[1]="unknown";      if ($arch == NULL) $arch="unknown";      if ($agentstring == NULL) $agentstring="unknown";      if ($remote_ip == NULL) $remote_ip="unknown";      if ($render_eng == NULL) $render_eng="unknown";      if ($render_eng_ver == NULL) $render_eng_ver="unknown";      if ($moz_release == NULL ) $moz_release="unknown";      ########################################            ##### put results into member vars #####      ########################################      $this -> arch = $arch;      $this -> os = $os[0];      $this -> os_ver = $os[1];      $this -> os_vendor = $os[2];      $this -> browser = $browser;      $this -> browser_ver = $browser_ver;      $this -> browser_subver = $browser_subver;      $this -> browser_sup = $browser_sup;      $this -> lang = $lang[0];      $this -> sub_lang = $lang[1];      $this -> encryption = $encryption;      $this -> agentstring = $agentstring;      $this -> http_lang = $http_lang;      $this -> remote_ip = $remote_ip;      $this -> render_eng = $render_eng;      $this -> render_eng_ver = $render_eng_ver;      $this -> moz_release = $moz_release;            # for debugging only      # DO NOT use these      $this -> moz_extra_ver = $moz_extra_ver;      $this -> moz_extra_ver1 = $moz_extra_ver1;      $this -> moz_extra_ver2 = $moz_extra_ver2;      $this -> moz_extra_ver3 = $moz_extra_ver3;      $this -> moz_extra_ver4 = $moz_extra_ver4;      $this -> moz_rv = $moz_rv;      $this -> chkvers = $chkvers;      $this -> luser_agent0 = $luser_agent0;      $this -> luser_agent1 = $luser_agent1;      $this -> luser_agent2 = $luser_agent2;      $this -> testwarn = $testwarn;      }      ###################      ##### logging #####      ###################      function logger($datafile) {        $testwarn = $this -> testwarn;        $agentstring = $this -> agentstring;	        # read the file        $newfile = fopen($datafile,"r");        $content = fread($newfile,filesize($datafile));        fclose($newfile);                                                                                        # is it already in the db?        $lines = explode("\n%",$content);        for ($key=0;$key<sizeof($lines);$key++){          if ($lines[$key] == $agentstring){            $found=1;          }        }                                                                                        # if not, add it.        if (($found!=1) && ($testwarn != "yes")){          $newfile = fopen($datafile,"a+");          $add = "\n%".$agentstring;          fwrite($newfile,$add);          fclose($newfile);        }                                                                                      }      ####################      ##### show log #####      ####################      function showlog($datafile,$rootdoc) {               # read the file        $newfile = fopen($datafile,"r");        $content = fread($newfile,filesize($datafile));        fclose($newfile);        $lines = explode("\n%",$content);		#display it.	sort($lines);        reset($lines);        for ($key=1;$key<sizeof($lines);$key++){          $tmp_string=urlencode($lines[$key]);          if (strpos($rootdoc,"?")) {            // for rootdocs with questions (like index.php?page=test)            echo "<a href=\"$rootdoc&teststring=$tmp_string\">".$lines[$key]."</a><br />\n";          } else {            // for rootdocs without questions (like index.php)            echo "<a href=\"$rootdoc?teststring=$tmp_string\">".$lines[$key]."</a><br />\n";          }        }      }	            ##########################      ##### debug function #####      ##########################      function debug() {        $chkvers = $this -> chkvers;	$luser_agent0 = $this -> luser_agent0;	$luser_agent1 = $this -> luser_agent1;	$luser_agent2 = $this -> luser_agent2;	$moz_extra_ver = $this -> moz_extra_ver;        $moz_extra_ver1 = $this -> moz_extra_ver1;        $moz_extra_ver2 = $this -> moz_extra_ver2;        $moz_extra_ver3 = $this -> moz_extra_ver3;        $moz_extra_ver4 = $this -> moz_extra_ver4;        $moz_rv = $this -> moz_rv;	echo "<table border=\"1\">";        for ($i = 0; $i <= sizeof($luser_agent0); $i++){          echo "<tr><td class=\"text\">luser_agent0[$i]:</td><td class=\"text\">\"$luser_agent0[$i]\"</td></tr>";	}        for ($i = 0; $i <= sizeof($luser_agent1); $i++){          echo "<tr><td class=\"text\">luser_agent1[$i]:</td><td class=\"text\">\"$luser_agent1[$i]\"</td></tr>";	}        for ($i = 0; $i <= sizeof($luser_agent2); $i++){          echo "<tr><td class=\"text\">luser_agent2[$i]:</td><td class=\"text\">\"$luser_agent2[$i]\"</td></tr>";	}        for ($i = 0; $i <= sizeof($chkvers); $i++){          echo "<tr><td class=\"text\">chkvers[$i]:</td><td class=\"text\">\"$chkvers[$i]\"</td></tr>";	}        for ($i = 0; $i <= sizeof($moz_extra_ver); $i++){          echo "<tr><td class=\"text\">moz_extra_ver[$i]:</td><td class=\"text\">\"$moz_extra_ver[$i]\"</td></tr>";	}        for ($i = 0; $i <= sizeof($moz_extra_ver1); $i++){          echo "<tr><td class=\"text\">moz_extra_ver1[$i]:</td><td class=\"text\">\"$moz_extra_ver1[$i]\"</td></tr>";	}        for ($i = 0; $i <= sizeof($moz_extra_ver2); $i++){          echo "<tr><td class=\"text\">moz_extra_ver2[$i]:</td><td class=\"text\">\"$moz_extra_ver2[$i]\"</td></tr>";	}        for ($i = 0; $i <= sizeof($moz_extra_ver3); $i++){          echo "<tr><td class=\"text\">moz_extra_ver3[$i]:</td><td class=\"text\">\"$moz_extra_ver3[$i]\"</td></tr>";	}        for ($i = 0; $i <= sizeof($moz_extra_ver4); $i++){          echo "<tr><td class=\"text\">moz_extra_ver4[$i]:</td><td class=\"text\">\"$moz_extra_ver4[$i]\"</td></tr>";	}        for ($i = 0; $i <= sizeof($moz_rv); $i++){          echo "<tr><td class=\"text\">moz_rv[$i]:</td><td class=\"text\">\"$moz_rv[$i]\"</td></tr>";	}	echo "</table><br />";      }            #########################      ##### test function #####      #########################      function test()        {          $testwarn = $this -> testwarn;	  $browser = $this -> browser;          $browser_ver = $this -> browser_ver;          $browser_subver = $this -> browser_subver;	  $browser_sup = $this -> browser_sup;	  $os = $this -> os;          $os_ver = $this -> os_ver;          $os_vendor = $this -> os_vendor;          $arch = $this -> arch;          $lang[0] = $this -> lang;          $lang[1] = $this -> sub_lang;          $encryption = $this -> encryption;          $agentstring = $this -> agentstring;          $http_lang = $this -> http_lang;	  $remote_ip = $this -> remote_ip;	  $render_eng = $this -> render_eng;	  $render_eng_ver = $this -> render_eng_ver;	  $moz_release = $this -> moz_release;                	  if ($testwarn == "yes" ) {	    echo "<strong>WARNING: Useragentstring overridden:</strong><br />";	  }	  echo "<table border=\"1\">";          echo "<tr><td class=\"text\">os:</td><td class=\"text\">$os</td></tr>";          echo "<tr><td class=\"text\">os vendor:</td><td class=\"text\">$os_vendor</td></tr>";          echo "<tr><td class=\"text\">os version:</td><td class=\"text\">$os_ver</td></tr>";          echo "<tr><td class=\"text\">arch:</td><td class=\"text\">$arch</td></tr>";          echo "<tr><td class=\"text\">browser:</td><td class=\"text\">$browser</td></tr>";          echo "<tr><td class=\"text\">browser version:</td><td class=\"text\">$browser_ver</td></tr>";          echo "<tr><td class=\"text\">browser subversion:</td><td class=\"text\">$browser_subver</td></tr>";          echo "<tr><td class=\"text\">browser supplied by:</td><td class=\"text\">$browser_sup</td></tr>";          echo "<tr><td class=\"text\">mozilla release:</td><td class=\"text\">$moz_release</td></tr>";          echo "<tr><td class=\"text\">lang:</td><td class=\"text\">$lang[0]</td></tr>";          echo "<tr><td class=\"text\">sublang:</td><td class=\"text\">$lang[1]</td></tr>";          echo "<tr><td class=\"text\">encryption:</td><td class=\"text\">$encryption</td></tr>";          echo "<tr><td class=\"text\">remote ip:</td><td class=\"text\">$remote_ip</td></tr>";          echo "<tr><td class=\"text\">render engine:</td><td class=\"text\">$render_eng</td></tr>";          echo "<tr><td class=\"text\">render engine version:</td><td class=\"text\">$render_eng_ver</td></tr>";          echo "</table><br />";          echo "HTTP Useragentstring: " . $agentstring . "<br />";          echo "HTTP Accept Language: " . $http_lang . "<br />";	  print'	    <form method="post">	    Teststring: <input type="text" name="teststring" />	    <input type="submit" name="Check" value="Submit">	    </form>';        }}?>