首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检测安装在网页中的.NET框架(纯HTML或PHP)

问如何检测安装在网页中的.NET框架(纯HTML或PHP)
EN

Stack Overflow用户
提问于 2010-07-05 11:33:11
回答 4查看 3.4K关注 0票数 1

如果符合下列条件之一,我需要在网页(PHP)上显示其他信息:

  • .NET Framework安装在低于3.5
  • 的客户端计算机上,无法确定.NET Framework3.5是否安装在客户端计算机

上

我知道有些浏览器(如果不止一个,IE)正在他的标签中发送信息。

你们谁能给我提供他的建议?

网站是用PHP构建的。

谢谢!

编辑:

建议的答案是不完整的和/或没有为我提供一个强有力的解决方案。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-07-16 14:16:15

这是另一个版本,我实际上是为我的一个朋友做的,并意识到这条线上有一个慷慨的东西,这到底是怎么回事:)

这是完全可行的,但只适用于用户代理字符串,因为没有其他方法可以这样做。

核心课程:

代码语言:javascript
复制
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;
                }
            }
        }
    }
}

示例用法:

代码语言:javascript
复制
$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字符串,让我们说

代码语言:javascript
复制
$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
EN

Stack Overflow用户

发布于 2010-07-05 11:44:04

获取此信息的唯一方法是从浏览器发送的user agent中获取这些信息。您可以从那里解析.NET版本。但是请注意,客户端可以伪造或完全省略这些信息,因此我不会将任何关键功能建立在此基础上。

票数 4
EN

Stack Overflow用户

发布于 2010-07-05 11:50:06

我将尝试在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:

代码语言:javascript
复制
<?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 ?>

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3179127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档