这里是另一个版本。 我实际上为一位地雷的朋友做了发言,并认识到,在座右边有 b,因此:
这完全是行之有效的,但只靠使用者的力量,因为没有其他办法这样做。
核心类别:
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;
}
}
}
}
}
例:
$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
}
}
如果你也想从非行检查美国关税同盟的产物,请说
$Net = new NETFrameworkChecker("Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Pivim Multibar; GTB6.4; .NET CLR 2.0.50727)");