问题
I need to display additional information on a web page (PHP) if one of the following criteria is met:
- .NET Framework Installed on the client machine in lower than 3.5
- Impossible to determine if .NET Framework 3.5 is installed or not on the client machine
I know that some browser (if not only one, IE) is sending that information in his tag.
Can any of you provide me with his suggestions ?
Website is built in PHP.
Thanks!
EDIT:
Proposed answers are incomplete and/or don't provide me with a robust solution.
回答1:
Here is another version I actually made for a friend of mine and realised that there was a bounty on this thread so what the hell :)
This is fully working but only with User-agent strings as there is no alternative means of doing so.
The core class:
class NETFrameworkChecker
{
//General String / Array holders
var $original_au,$ua_succesParse,$ua_componants,$ua_dotNetString,$CLRTag = "";
//IsInstalled
var $installed = false;
//Version holders
public $major = 0,$minor = 0,$build = 0;
public function __construct($ua = false)
{
$this->original_au = $ua !== false ? $ua : $_SERVER['HTTP_USER_AGENT'];
$this->ParserUserAgent();
}
public function Installed(){return (bool)$this->installed;}
public function AUTag(){return $this->CLRTag;}
//Version Getters
public function getMajor(){return $this->major;}
public function getMinor(){return $this->minor;}
public function getBuild(){return $this->build;}
private function ParserUserAgent()
{
$this->ua_succesParse = (bool) preg_match('/(?<browser>.+?)\s\((?<components>.*?)\)/',$this->original_au,$this->ua_componants);
if($this->ua_succesParse)
{
$this->ua_componants = explode(';',$this->ua_componants['components']);
foreach($this->ua_componants as $aComponant)
{
$aComponant = trim($aComponant);
if(substr(strtoupper($aComponant),0,4) == ".NET")
{
//We have .Net Installed
$this->installed = true;
$this->CLRTag = $aComponant;
//Lets make sure we can get the versions
$gotVersions = (bool)preg_match("/\.NET.CLR.+?(?<major>[0-9]{1})\.(?<minor>[0-9]{1})\.(?<build>[0-9]+)/si",$aComponant,$versions);
if($gotVersions)
{
$this->major = (int)$versions['major'];
$this->minor = (int)$versions['minor'];
$this->build = (int)$versions['build'];
}
break;
}
}
}
}
}
Example Usage:
$Net = new NETFrameworkChecker(); //leave first param blank to detect current user agent
if($Net->Installed())
{
if($Net->getMajor()> 2 && $Net->getMinor() >= 0)
{
//User is using a >NET system thats greater than 2.0.0000
if($Net->GetBuild() >= 0200)
{
//We can do stuff with so that's only supported from this build up-words
}
}else
{
//Redirect them asking them to upgrade :) pretty please
}
}
If you also want to check custom UA Strings from DB lets say
$Net = new NETFrameworkChecker("Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Pivim Multibar; GTB6.4; .NET CLR 2.0.50727)");
回答2:
The only way to get this information is from the user agent
that the browser sends. You can parse the .NET version from there. But note that client can spoof this information or omit it completely, so I wouldn't base any critical functionality on this.
回答3:
I would try and do a strstr on the UserAgent in PHP, Example Below
A .NET User Agent : Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Pivim Multibar; GTB6.4; .NET CLR 2.0.50727)
The PHP:
<?php
function DotNetInstalled($ua = false)
{
$ua = $ua ? $ua : $_SERVER['HTTP_USER_AGENT'];
//return (strstr('.NET CLR',$ua) !== false);
$matches = preg_match('^\.NET CLR ([0-4]+\.)?([0-9]\.)?(\*|\d+)$',$ua);
if((int)$matches[1] > 0)
{
return array(
(int)$matches[1],
(int)$matches[2],
(int)$matches[3],
);
}
return false;
}
if(false !== ($version = DotNetInstalled()))
{
//Show me the money
//$version[0] = 2
//$version[1] = 0
//$version[2] = 50727
}
?>
I would also check out the following PEAR Package : http://pear.php.net/package/Net_UserAgent_Detect ?>
回答4:
Info about .NET CLR versions in the UserAgent:
- http://www.hanselman.com/blog/TheNETFrameworkAndTheBrowsersUserAgentString.aspx
- http://msdn.microsoft.com/en-us/library/ms537503.aspx
来源:https://stackoverflow.com/questions/3179127/how-to-detect-net-framework-installed-in-a-web-page-pure-html-or-php