如果满足以下条件之一,我需要在网页 (PHP) 上显示附加信息:
- .NET Framework 安装在低于 3.5 的客户端计算机上
- 无法确定客户端计算机上是否安装了 .NET Framework 3.5
我知道某些浏览器(如果不是只有一个,IE)正在他的标签中发送该信息。
你们中的任何人都可以向我提供他的建议吗?
网站是用 PHP 构建的。
谢谢!
编辑:
建议的答案不完整和/或没有为我提供强大的解决方案。
如果满足以下条件之一,我需要在网页 (PHP) 上显示附加信息:
我知道某些浏览器(如果不是只有一个,IE)正在他的标签中发送该信息。
你们中的任何人都可以向我提供他的建议吗?
网站是用 PHP 构建的。
谢谢!
编辑:
建议的答案不完整和/或没有为我提供强大的解决方案。
获取此信息的唯一方法是从user agent
浏览器发送的信息中获取。您可以从那里解析 .NET 版本。但请注意,客户端可以欺骗此信息或完全忽略它,因此我不会将任何关键功能基于此。
我会尝试在 PHP 中的 UserAgent 上执行 strstr,示例如下
.NET 用户代理:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Pivim Multibar; GTB6.4; .NET CLR 2.0.50727)
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
}
?>
我还会查看以下 PEAR 包: http: //pear.php.net/package/Net_UserAgent_Detect ?>
这是我实际上为我的一个朋友制作的另一个版本,并意识到这个线程有一个赏金所以到底是什么:)
这是完全有效的,但仅适用于用户代理字符串,因为没有其他方法可以这样做。
核心类:
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
}
}
如果您还想从 DB 中检查自定义 UA 字符串,可以说
$Net = new NETFrameworkChecker("Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Pivim Multibar; GTB6.4; .NET CLR 2.0.50727)");
UserAgent 中有关 .NET CLR 版本的信息: