2011-02-02 2 views
0

ユーザがphpでページを閲覧するブラウザを検出する正しい方法はどれですか?PHPでブラウザを見つける

私はそれのような何かを与え、get_browserで試してみました:これは私がIE7、ChromeとMozilla Firefox用得たものである

Array (
    [browser_name_regex] => §^.*$§ 
    [browser_name_pattern] => * 
    [browser] => Default Browser 
    [version] => 0 
    [majorver] => 0 
    [minorver] => 0 
    [platform] => unknown 
    [alpha] => 
    [beta] => 
    [win16] => 
    [win32] => 
    [win64] => 
    [frames] => 1 
    [iframes] => 
    [tables] => 1 
    [cookies] => 
    [backgroundsounds] => 
    [cdf] => 
    [vbscript] => 
    [javaapplets] => 
    [javascript] => 
    [activexcontrols] => 
    [isbanned] => 
    [ismobiledevice] => 
    [issyndicationreader] => 
    [crawler] => 
    [cssversion] => 0 
    [supportscss] => 
    [aol] => 
    [aolversion] => 0 
) 

私は$_SERVER['HTTP_USER_AGENT']を試してみましたが、それは私がここにいくつかの情報を取得することができていてくれMozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.237 Safari/534.10

を与えました。

もっと良い方法があるのか​​どうか教えてください。これはブラウザごとに異なるCSSでHTMLコンテンツを表示するのに適したソリューションですか?

+0

を言っているこのタイトルに素敵なブログを見つけましたか?もしそうなら、あなたのコードのどこかに問題があると思います。コードを投稿してください。しかし、私は関数が動作することを約束することができます:) – madmik3

+0

可能な複製[のPHPでブラウザを検出するための最良の方法は何ですか?](http://stackoverflow.com/questions/4819226/whats-the-best-way-to-detect -a-browser-with-php) – Spudley

+0

この質問は以前に何度も聞かれました。例については上記の私の重複した注意を参照してください。簡単な答えは、サーバーからブラウザを確実に検出できないことです。 – Spudley

答えて

0

条件文はPHPを使用せずに動作します。

http://www.quirksmode.org/css/condcom.html

+0

私の最初のアイデアも同様ですが、彼らは私のエンタープライズとのために、JavaScriptの基本的なブラウザ機能性についてのミニマリストのようなものでも、あなたのリンクされた答えのために、IE –

1

thisブログを引用:

ブラウザの検出は、最終的には失敗する運命にある幻想的な作業です。ブラウザは常に変化しており、これらの変更を最新に保つことは継続的な仕事です。一部のブラウザでは、ブラウザが自分自身を識別する方法を変更したり、まったく識別しないようにすることができます。一部のファイアウォールはブラウザ識別情報の送信をブロックするため、ブラウザ検出方式は完全に成功しません。

注:また、ブラウザ検出悪い習慣hereについての詳細を読みます。

しかし、ここで言われているが、私は一度使用a scriptだこと:言及を1として

<?php 

/** 
* Class to detect which browser is currently accessing the page/site 
* @author Paul Scott 
* This class is very loosely based on scripts by Gary White 
* @copyright Paul Scott 
* @package browser 
*/ 

class browser 
{ 
    /** 
    * @var string $name 
    */ 
    var $name = NULL; 

    /** 
    * @var string $version 
    */ 
    var $version = NULL; 

    /** 
    * @var $useragent 
    */ 
    var $useragent = NULL; 

    /** 
    * @var string $platform 
    */ 
    var $platform; 

    /** 
    * @var string aol 
    */ 
    var $aol = FALSE; 

    /** 
    * @var string browser 
    */ 
    var $browsertype; 

    /** 
    * Class constructor 
    * @param void 
    * @return void 
    */ 
    function browser() 
    { 
     $agent = $_SERVER['HTTP_USER_AGENT']; 
     //set the useragent property 
     $this->useragent = $agent; 
    } 

    /** 
    * Method to get the browser details from the USER_AGENT string in 
    * the PHP superglobals 
    * @param void 
    * @return string property platform 
    */ 
    function getBrowserOS() 
    { 
     $win = eregi("win", $this->useragent); 
     $linux = eregi("linux", $this->useragent); 
     $mac = eregi("mac", $this->useragent); 
     $os2 = eregi("OS/2", $this->useragent); 
     $beos = eregi("BeOS", $this->useragent); 

     //now do the check as to which matches and return it 
     if($win) 
     { 
      $this->platform = "Windows"; 
     } 
     elseif ($linux) 
     { 
      $this->platform = "Linux"; 
     } 
     elseif ($mac) 
     { 
      $this->platform = "Macintosh"; 
     } 
     elseif ($os2) 
     { 
      $this->platform = "OS/2"; 
     } 
     elseif ($beos) 
     { 
      $this->platform = "BeOS"; 
     } 
     return $this->platform; 
    } 

    /** 
    * Method to test for Opera 
    * @param void 
    * @return property $broswer 
    * @return property version 
    * @return bool false on failure 
    */ 
    function isOpera() 
    { 
     // test for Opera  
     if (eregi("opera",$this->useragent)) 
     { 
      $val = stristr($this->useragent, "opera"); 
      if (eregi("/", $val)){ 
       $val = explode("/",$val); 
       $this->browsertype = $val[0]; 
       $val = explode(" ",$val[1]); 
       $this->version = $val[0]; 
      }else{ 
       $val = explode(" ",stristr($val,"opera")); 
       $this->browsertype = $val[0]; 
       $this->version = $val[1]; 
      } 
      return TRUE; 
     } 
     else { 
      return FALSE; 
     } 
    } 

    /** 
    * Method to check for FireFox 
    * @param void 
    * @return bool false on failure 
    */ 
    function isFirefox() 
    { 
     if(eregi("Firefox", $this->useragent)) 
     { 
      $this->browsertype = "Firefox"; 
      $val = stristr($this->useragent, "Firefox"); 
      $val = explode("/",$val); 
      $this->version = $val[1]; 
      return true; 
     } 
     else { 
      return FALSE; 
     } 
    } 

    /** 
    * Method to check for Konquerer 
    * @param void 
    * @return prop $browser 
    * @return prop $version 
    * @return bool true on success 
    */ 
    function isKonqueror() 
    { 
     if(eregi("Konqueror",$this->useragent)) 
     { 
      $val = explode(" ",stristr($this->useragent,"Konqueror")); 
      $val = explode("/",$val[0]); 
      $this->browsertype = $val[0]; 
      $this->version = str_replace(")","",$val[1]); 
      return TRUE; 
     } 
     else { 
      return FALSE; 
     } 

    }//end func 

    /** 
    * Method to check for Internet Explorer v1 
    * @param void 
    * @return bool true on success 
    * @return prop $browsertype 
    * @return prop $version 
    */ 
    function isIEv1() 
    { 
     if(eregi("microsoft internet explorer", $this->useragent)) 
     { 
      $this->browsertype = "MSIE"; 
      $this->version = "1.0"; 
      $var = stristr($this->useragent, "/"); 
      if (ereg("308|425|426|474|0b1", $var)) 
      { 
       $this->version = "1.5"; 
      } 
      return TRUE; 
     } 
     else { 
      return FALSE; 
     } 
    }//end function 

    /** 
    * Method to check for Internet Explorer later than v1 
    * @param void 
    * @return bool true on success 
    * @return prop $browsertype 
    * @return prop $version 
    */ 
    function isMSIE() 
    { 
     if(eregi("msie", $this->useragent) && !eregi("opera",$this->useragent)) 
     { 
      $this->browsertype = "MSIE"; 
      $val = explode(" ",stristr($this->useragent,"msie")); 
      $this->browsertype = $val[0]; 
      $this->version = $val[1]; 

      return TRUE; 
     } 
     else { 
      return FALSE; 
     } 
    }//end function 

    /** 
    * Method to check for Galeon 
    * @param void 
    * @return bool true on success 
    */ 
    function isGaleon() 
    { 
     if(eregi("galeon",$this->useragent)) 
     { 
      $val = explode(" ",stristr($this->useragent,"galeon")); 
      $val = explode("/",$val[0]); 
      $this->browsertype = $val[0]; 
      $this->version = $val[1]; 
      return TRUE; 
     } 
     else { 
      return FALSE; 
     } 
    }//end func 

    /** 
    * Now we do the tests for browsers I can't test... 
    * If someone finds a bug, please report it ASAP to me please! 
    */ 

    /** 
    * Method to check for WebTV browser 
    * @param void 
    * @return bool true on success 
    * @return prop $browsertype 
    * @return prop $version 
    */ 
    function isWebTV() 
    { 
     if(eregi("webtv",$this->useragent)) 
     { 
      $val = explode("/",stristr($this->useragent,"webtv")); 
      $this->browsertype = $val[0]; 
      $this->version = $val[1]; 
      return TRUE; 
     } 
     else { 
      return FALSE; 
     } 
    } 

    /** 
    * Method to check for BeOS's NetPositive 
    * @param void 
    * @return bool true on success 
    * @return prop $browsertype 
    * @return prop $version 
    */ 
    function isNetPositive() 
    { 
     if(eregi("NetPositive", $this->useragent)) 
     { 
      $val = explode("/",stristr($this->useragent,"NetPositive")); 
      $this->platform = "BeOS"; 
      $this->browsertype = $val[0]; 
      $this->version = $val[1]; 
      return TRUE; 
     } 
     else { 
      return FALSE; 
     } 
    } 

    /** 
    * Method to check for MSPIE (Pocket IE) 
    * @param void 
    * @return bool true on success 
    */ 
    function isMSPIE() 
    { 
     if(eregi("mspie",$this->useragent) || eregi("pocket", $this->useragent)) 
     { 
      $val = explode(" ",stristr($this->useragent,"mspie")); 
      $this->browsertype = "MSPIE"; 
      $this->platform = "WindowsCE"; 
      if (eregi("mspie", $this->useragent)) 
       $this->version = $val[1]; 
      else { 
       $val = explode("/",$this->useragent); 
       $this->version = $val[1]; 
      } 
      return TRUE; 
     } 
     else { 
      return FALSE; 
     } 
    } 

    /** 
    * Method to test for iCab 
    * @param void 
    * @return bool true on success 
    */ 
    function isIcab() 
    { 
     if(eregi("icab",$this->useragent)) 
     { 
      $val = explode(" ",stristr($this->useragent,"icab")); 
      $this->browsertype = $val[0]; 
      $this->version = $val[1]; 
      return TRUE; 
     } 
     else { 
      return FALSE; 
     } 
    } 

    /** 
    * Method to test for the OmniWeb Browser 
    * @param void 
    * @return bool True on success 
    */ 
    function isOmniWeb() 
    { 
     if(eregi("omniweb",$this->useragent)) 
     { 
      $val = explode("/",stristr($this->useragent,"omniweb")); 
      $this->browsertype = $val[0]; 
      $this->version = $val[1]; 
      return TRUE; 
     } 
     else { 
      return FALSE; 
     } 
    } 

    /** 
    * Method to check for Phoenix Browser 
    * @param void 
    * @return bool true on success 
    */ 
    function isPhoenix() 
    { 
     if(eregi("Phoenix", $this->useragent)) 
     { 
      $this->browsertype = "Phoenix"; 
      $val = explode("/", stristr($this->useragent,"Phoenix/")); 
      $this->version = $val[1]; 
      return TRUE; 
     } 
     else { 
      return FALSE; 
     } 
    } 

    /** 
    * Method to check for Firebird 
    * @param void 
     * @return bool true on success 
    */ 
    function isFirebird() 
    { 
     if(eregi("firebird", $this->useragent)) 
     { 
      $this->browsertype = "Firebird"; 
      $val = stristr($this->useragent, "Firebird"); 
      $val = explode("/",$val); 
      $this->version = $val[1]; 
      return TRUE; 
     } 
     else { 
      return FALSE; 
     } 
    } 

    /** 
    * Method to check for Mozilla alpha/beta 
    * @param void 
    * @return bool true on success 
    */ 
    function isMozAlphaBeta() 
    { 
     if(eregi("mozilla",$this->useragent) && 
      eregi("rv:[0-9].[0-9][a-b]",$this->useragent) && 
      !eregi("netscape",$this->useragent)) 

     { 
      $this->browsertype = "Mozilla"; 
      $val = explode(" ",stristr($this->useragent,"rv:")); 
      eregi("rv:[0-9].[0-9][a-b]",$this->useragent,$val); 
      $this->version = str_replace("rv:","",$val[0]); 
      return TRUE; 
     } 
     else { 
      return FALSE; 
     } 
    }//end function 

    /** 
    * Method to check for Mozilla Stable versions 
    * @param void 
    * @return bool true on success 
    */ 
    function isMozStable() 
    { 
     if(eregi("mozilla",$this->useragent) && 
      eregi("rv:[0-9]\.[0-9]",$this->useragent) && 
      !eregi("netscape",$this->useragent)) 
     { 
      $this->browsertype = "Mozilla"; 
      $val = explode(" ",stristr($this->useragent,"rv:")); 
      eregi("rv:[0-9]\.[0-9]\.[0-9]",$this->useragent,$val); 
      $this->version = str_replace("rv:","",$val[0]); 
      return TRUE; 
     } 
     else { 
      return FALSE; 
     } 
    } 

    /** 
    * Method to check for Lynx and Amaya 
    * @param void 
    * @return bool true on success 
    */ 
    function isLynx() 
    { 
     if(eregi("libwww", $this->useragent)) 
     { 
      if (eregi("amaya", $this->useragent)) 
      { 
       $val = explode("/",stristr($this->useragent,"amaya")); 
       $this->browsertype = "Amaya"; 
       $val = explode(" ", $val[1]); 
       $this->version = $val[0]; 
      } else { 
       $val = explode("/",$this->useragent); 
       $this->browsertype = "Lynx"; 
       $this->version = $val[1]; 
      } 
      return TRUE; 
     } 
     else { 
      return FALSE; 
     } 
    } 

    /** 
    * method to check for safari browser 
    * @param void 
    * @return bool true on success 
    */ 
    function isSafari() 
     { 
     if(eregi("safari", $this->useragent)) 
     { 
      $this->browsertype = "Safari"; 
      $this->version = ""; 
      return TRUE; 
     } 
     else { 
      return FALSE; 
     } 
    } 

    /** 
    * Various tests for Netscrape 
    * @param void 
    * @return bool true on success 
    */ 
    function isNetscape() 
    { 
     if(eregi("netscape",$this->useragent)) 
     { 
      $val = explode(" ",stristr($this->useragent,"netscape")); 
      $val = explode("/",$val[0]); 
      $this->browsertype = $val[0]; 
      $this->version = $val[1]; 
      return TRUE; 
     } 
     elseif(eregi("mozilla",$this->useragent) && 
       !eregi("rv:[0-9]\.[0-9]\.[0-9]",$this->useragent)) 
     { 
      $val = explode(" ",stristr($this->useragent,"mozilla")); 
      $val = explode("/",$val[0]); 
      $this->browsertype = "Netscape"; 
      $this->version = $val[1]; 
      return TRUE; 
     } 
     else { 
      return FALSE; 
     } 
    }//end func 

    /** 
    * Method to check for AOL connections 
    * @param void 
    * @return bool true on Success 
    */ 
    function isAOL() 
    { 
     if (eregi("AOL", $this->useragent)){ 
      $var = stristr($this->useragent, "AOL"); 
      $var = explode(" ", $var); 
      $this->aol = ereg_replace("[^0-9,.,a-z,A-Z]", "", $var[1]); 
      return TRUE; 
     } 
     else { 
      return FALSE; 
     } 
    } 

    /** 
    * Method to tie them all up and output something useful 
    * @param void 
    * @return array 
    */ 
    function whatBrowser() 
    { 
     $this->getBrowserOS(); 
     $this->isOpera(); 
     $this->isFirefox(); 
     $this->isKonqueror(); 
     $this->isIEv1(); 
     $this->isMSIE(); 
     $this->isGaleon(); 
     $this->isNetPositive(); 
     $this->isMSPIE(); 
     $this->isIcab(); 
     $this->isOmniWeb(); 
     $this->isPhoenix(); 
     $this->isFirebird(); 
     $this->isLynx(); 
     $this->isSafari(); 
     //$this->isMozAlphaBeta(); 
     //$this->isMozStable(); 
     //$this->isNetscape(); 
     $this->isAOL(); 
     return array('browsertype' => $this->browsertype, 
        'version' => $this->version, 
        'platform' => $this->platform, 
        'AOL' => $this->aol); 
    } 
}//end class 
?> 

conditional commentsはIEのみで動作することがあり、しかし、あなたはすぐそこに問題の約90%を解決します。別のノートで

、あなたはなど、ブラウザの言語を返すために、どのような場合には

を面白いZend_Localeを見つけることが、あなたが最もサポートしたいブラウザほう標的になるだろう、その1に集中してみてください最終的に他のブラウザに準拠することができます。 (ただし、「特定のブラウザではなく標準をターゲットにする」というのは良いアイデアです。)Echo2、GWTなどのフレームワークを使用しない限り、すべてのことをやる必要があります。

1

あなたは非常に複雑なデザインを持っています。すべてのブラウザに同じCSSを使用してクロスブラウザーで最適化しようとする必要があります。シンプルで明確なHTML構造があれば最適です。

これは、あなたが多くの異なるCSSファイルを維持する必要がないので、これはあなたの気持ちを保つでしょう。

はIE6があなたがget_browserのうち、有用なデータを取得していない

1

理由を述べたget_browserは魔法ではないためであるcentr0条件文を使用することができ、非常に特殊なケースかもしれません。

サーバ上にファイルがあり、ブラウザがどのように機能し、何ができるかを定義するファイルがbrowsecap.iniであることが必要です。

PHPのマニュアルページのbrowsecap.iniについては、get_browser-http://uk3.php.net/get_browserのメモがあります。このノートでは、browsecap.iniはPHPの標準としては提供されていませんが、最新バージョンを入手できる場所へのリンクを提供しています。

browsecap.iniファイルは、ブラウザの新しいバージョンがリリースされるたびにサイトのオーナー(つまりあなた)が最新の状態に保つ必要があります。そうしないと、すぐに悪い結果が得られます。しかし

、でも最新browsecap.iniファイルと、あなたはまだそれはブラウザを決定するために見て、データがで詐称することができますので、あなたに正確な答えを与えるためにget_browserに頼ることはできませんブラウザ - たとえば、FirefoxにはIEのさまざまなバージョンのふりをするオプションがあり、他のほとんどのブラウザにも同様の機能があります。これは完全にget_browserをばかげます。これを回避する方法はありません。

クライアント側でJavascriptを使用して、ブラウザがサポートしている機能を判断する方がはるかに優れています。詳細については、answer to this questionを参照してください。

あなたの質問にお答えしたいと思います。

+0

+1のためだけに働きます。公共セクター機関 - IE6が多く、ハイ・アクセシビリティのサイトが混在し、厳しいセキュリティ問題がある顧客の背景。 –

0

私はあなたがすべてのブラウザのためのFirefoxをゲット http://quicklesson.info/article/how-to-find-browser-name-using-php

+1

リンクに頼るのではなく、回答自体をここに投稿する方が良いです。リンクが壊れてしまい、回答があればこのサイトの他のユーザーに役立ちます。 –

関連する問題