Warning: Undefined array key "HTTP_REFERER" in /var/www/html/blogg/include/common.php on line 149

Warning: Undefined array key "HTTP_ACCEPT_LANGUAGE" in /var/www/html/blogg/include/common.php on line 149

Warning: Undefined array key "module_gallery_main_page" in /var/www/html/blogg/modules/gallery/init.php on line 6
root@circe.se

Webbläsardetection


Warning: Undefined array key "votes" in /var/www/html/blogg/index.php on line 63


Warning: Undefined array key 1 in /var/www/html/blogg/include/parser.php on line 314
Har pillat ett par timmar med webbläsardetection idag. Det hela går ut på att man har HTTP_USER_AGENT, vilket är den sträng webbläsaren identifierar sig med. Ur denna sträng lyfter man sedan ur operativsystemet (ibland även version), webbläsarnamn och webbläsarversion. Det jag har pillat med idag är en implementation i PHP som gör just det. Jag kan ärligt säga att jag har lånat regexpen för en hög olika webbläsare och operativsystem från truncate_url("http://www.skoglind.se/myip/", "skoglinds MyIP"). Skoglinds kod finns att truncate_url("http://www.skoglind.se/programmering/info_sniffer.asp", "ladda ner"), dock är den skriven i ASP och jag behövde en PHP-version. Så jag skrev en. Dock tog jag mig friheten att använda hans databaser över webbläsare och operativsystem. Med tanke på att det står "Denna sniffer får hämtas hem och användas hur som helst." längst ner på nedladdningssidan tolkar jag det som tillåtet.

EDIT (2006-01-20 15:35): Har pratat med Skogga och bett om lov att använda hans regexp för detection (vilket man bör göra tycker jag, även om det står att det är fritt att använda). Han hade inga invändningar mot detta. Jag kommer också att släppa min PHP-version för nedlandning så snart jag är nöjd med den eftersom många har efterfrågat en PHP-version av Skoggas script.

Jag skulle visserligen kunna samla ihop all data som behövs själv, men det känns onödigt när det redan är gjort. Det sparade mycket tid. Och om jag skulle samla ihop datan och skriva all regexp själv skulle den ändå se precis lika dan ut ;)

Det som återstår nu är att integrera det i bloggmjukvaran, sen ska man kunna få fina rapporter om vilka OS och webbläsare besökarna använder. När det är gjort och det finns möjligthet att ändra lite personliga inställningar och skriva en presentation så känns det moget för en första publik Alpha. Inte för att någon kommer att ladda ner det :)

Och i sann opensourceanda bifogar jag PHP-sourcen till sniffern, alla operativsystem och webbläsare är inte inlagda än och det finns inte en enda kommentar. Den fungerar, men det krävs en del modifikation om man vill använda den till något mer än att bara skriva ut informationen på sidan.

code:

<?php
// Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7
// Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322)
// Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.8) Gecko/20050927 Epiphany/1.4.8 (Debian)

$browsers = array(
'Firefox' => array('name' => 'Firefox', 'version' => 'Firefox/(.*?)(s|$)'),
'MSIE' => array('name' => 'Internet Explorer', 'version' => 'MSIEs(.*?)(;|s|))'),
'Epiphany' => array('name' => 'Epiphany', 'version' => 'Epiphany/(.*?)(;|s|))'),
'AM Browser' => array('name' => '(IE) AM Browser', 'version' => 'AM Browsers(.*?);'),
'Maxthon' => array('name' => '(IE) Maxthon', 'version' => ''),
'MSN/' => array('name' => '(IE) MSN', 'version' => 'MSNs(.*?);'),
'Opera Mini' => array('name' => 'Opera Mini', 'version' => 'Opera/(.*?)s'),
'Opera/' => array('name' => 'Opera', 'version' => 'Opera/(.*?)s'),
'Opera' => array('name' => 'Opera', 'version' => 'Operas(.*?)s'),
'SEMC-Browser/' => array('name' => 'SEMC Browser', 'version' => 'SEMC-Browser/(.*?)s')
);


echo '<pre>';
//print_r($browsers);
$oses = array(
'Debian' => array('name' => 'Debian GNU/Linux', 'version' => ''),
'gentoo' => array('name' => 'Gentoo Linux', 'version' => ''),
'Ubuntu' => array('name' => 'Ubuntu Linux', 'version' => ''),
'Fedora' => array('name' => 'Fedora Core', 'version' => ''),
'OpenBSD' => array('name' => 'OpenBSD', 'version' => ''),
'FreeBSD' => array('name' => 'FreeBSD', 'version' => ''),
'GNUTLS' => array('name' => 'Debian GNU/Linux', 'version' => ''),
'SunOS' => array('name' => 'Sun Solaris', 'version' => ''),
'Mac OS X' => array('name' => 'MacOS X', 'version' => ''),
'MacOS' => array('name' => 'MacOS X', 'version' => ''),
'Mac_PowerPC' => array('name' => 'MacOS X', 'version' => ''),
'Windows NT 5.2' => array('name' => 'Windows 2003/XP x64', 'version' => ''),
'SonyEricsson' => array('name' => 'Sony Ericsson', 'version' => ':SonyEricsson(.*?)(/|s)'),
'Linux' => array('name' => 'Linux', 'version' => 'Linuxs(.*?)(;|-)')
);

echo $_SERVER['HTTP_USER_AGENT'].'<br />';

$os = 'N/A';
$browser = 'N/A';
foreach ($browsers as $search => $data)
{
	//echo htmlspecialchars($data).': ';
	if(preg_match('/'.$search.'/', $_SERVER['HTTP_USER_AGENT']))
	{
		$browser = $data['name'];
		if($data['version'] != '')
		{
			if(preg_match('/'.$data['version'].'/', $_SERVER['HTTP_USER_AGENT'], $matches))
			{
				//print_r($matches);
				$browser = $browser.' ('.$matches[1].')';
			}
		}
		break;
	}
}

foreach ($oses as $search => $data)
{
	//echo htmlspecialchars($data).': ';
	if(preg_match('/'.$search.'/', $_SERVER['HTTP_USER_AGENT']))
	{
		$os = $data['name'];
		if($data['version'] != '')
		{
			if(preg_match('/'.$data['version'].'/', $_SERVER['HTTP_USER_AGENT'], $matches))
			{
				print_r($matches);
				$os = $os.' ('.$matches[1].')';
			}
		}
		break;
	}
}

echo $browser.'<br />'.$os;
?>

En arbetsdag kvar, sen är det helg.

Cheers.

No comments.

New comment

Name:

Homepage:

E-Mail:

Skriv ordet katt för att bevisa att du inte är en bot:

Message:

  • 1