2012-03-01 16 views
7

आवश्यकता: (PHP में) है जो फोन उपयोगकर्ता अपने ब्राउज़र से उपयोगकर्ता एजेंट स्ट्रिंग पार्स करने से उपयोग कर रहा है पता लगाने के लिए जैसे।। नोकिया 1100, सैमसंग डी 9 00।पार्सिंग मोबाइल फोन उपयोगकर्ता एजेंट स्ट्रिंग, अच्छा समाधान या पुस्तकालय?

वहाँ एक अच्छा पुस्तकालय फोन विक्रेताओं और मॉडलों के लिए पर्याप्त डाटाबेस के साथ उपलब्ध है?

कुछ समाधान मैंने पाया, एक ही पर अपने विचार की जरूरत है:

i) handsetdetection: https://www.handsetdetection.com - भुगतान की गई सदस्यता

ii) WURFL - http://wurfl.sourceforge.net/

iii) खुद समाधान - मैं फोन निर्माताओं, और मॉडल की एक छोटी डेटाबेस है, लेकिन मेरे कोड मैच के लिए/फजी मैच एक में उपयोगकर्ता एजेंट स्ट्रिंग के लिए टेलरमेड चेकों को जोड़ना होगा उपयोगकर्ता एजेंट स्ट्रिंग प्रारूप के रूप में डेटाबेस को हासिल करना निर्माताओं के अनुरूप नहीं है।

अद्यतन:

हम एक टेलरमेड के समाधान जो नियमित अभिव्यक्ति का मिश्रण सिम्बियन, जे 2 एमई, बड़ा आदि जैसे अन्य फोन के लिए फ़ॉलबैक तंत्र के रूप में आईओएस, एंड्रॉयड, ब्लैकबेरी, और WURFL जैसे मानक उपयोगकर्ता एजेंटों Parise लिए किया गया था बनाया

WURFL डेटाबेस/कैश (MySQL, memcached, mongodb आदि) जोड़ने के बाद बहुत अच्छा काम करता है जो कोर कोडबेस में सेटिंग के रूप में पहले से मौजूद है। हालांकि आपको WURFL हैंडसेट xml डेटाबेस के नवीनतम संस्करण के साथ wurfl जानकारी को अपडेट/सिंक करना होगा नए रिलीज किए गए मोबाइल फोन के चश्मे के साथ अद्यतन रहने के लिए कुछ सप्ताह।

उत्तर

10

पहले, मैं KISS कहेंगे (यह सरल रखें, बेवकूफ), जो एक कारण के लिए एक व्यापक रूप से इस्तेमाल अभिव्यक्ति है। मैं अपने व्यापार की जरूरत की जाँच डबल द्वारा शुरू और देखो कितना डिवाइस जानकारी मैं वास्तव में जरूरत है और क्या मैं के लिए इसका इस्तेमाल करने के लिए जा रहा हूँ जाएगा। शायद आपको केवल यह देखने की ज़रूरत है कि क्लाइंट किस प्रस्तुतीकरण इंजन का उपयोग कर रहा है?

दूसरे, आप को पार्स समय पर विचार करना चाहिए। आप अर्थात WURFL का उपयोग कर और अपनी साइट पर है कि XML पार्सिंग अंत हैं, तो आप जब डिवाइस जानकारी के लिए जाँच एक्सएमएल के 400   000+ लाइनों पार्स करने के लिए की आवश्यकता होगी। बेशक, आप एक स्थानीय अनुक्रमित डेटाबेस में एक्सएमएल डाल सकता है, लेकिन यह भी डेटाबेस के साथ अद्यतन XML में डेटा सिंक्रनाइज़ करने के लिए कुछ रखरखाव लिपियों की आवश्यकता होगी।

तीसरा (लेकिन शायद यह पहले होना चाहिए?) समाधान की लागत/लाभ पर विचार कर रहा है। यदि आप साइट पर पैसे बनाने के लिए, यह एक साथी के बारे में कुछ जिम्मेदारी छोड़ने के लिए स्मार्ट हो सकता है। handsetdetection.com की तरह एक होस्टिंग सेवा एक नहीं तो भयानक कीमत पर उच्च यातायात देने में सक्षम है। एक और लाभ यह है कि वे अपने स्वयं के भंडार को बनाए रखने के लिए जिम्मेदार हैं और ग्राहकों को खो सकता है अगर उनकी सेवा काफी अच्छा नहीं है। OpenSource समुदाय सैद्धांतिक रूप से एक 4 महीने की छुट्टी पर जा सकते हैं और soulution उस अवधि में नहीं रखा जा सकता है (मैं वास्तव में सोच भी नहीं होता है कि चिंता करने के लिए कुछ किया जाना चाहिए के बारे में ;-)

नहीं अपने सटीक आवश्यकताओं को जानने, मैं Detect Mobile Browsers

  • जाओ OpenSource से संभव के रूप में सरल एक समाधान के रूप

    1. का प्रयोग करें, समाधान यानी, WURFL की तरह: इस तरह यह प्राथमिकता के आधार पर होगा। मैं सिर्फ OpenSource समाधान :-)
    2. प्यार अपने व्यापार की जरूरत की गारंटी तो स्थिरता और डेटा की गुणवत्ता, तुम देना चाहिए पेशेवरों संभाल यह ;-)
  • +0

    मैं इस तरह के शानदार जवाब से बक्षीस दूर लेने के लिए प्रतिस्पर्धा नहीं कर सकता! कीप आईटी उप! :।। ^) –

    +0

    > "दूसरे, आप पार्स समय पर विचार करना चाहिए आप यानी WURFL का उपयोग कर और अपनी साइट पर है कि XML पार्सिंग अंत हैं, तो आप जब डिवाइस जानकारी के लिए जाँच एक्सएमएल के 400 000+ लाइनों पार्स करने के लिए की आवश्यकता होगी बेशक, यदि आप एक स्थानीय अनुक्रमित डेटाबेस में एक्सएमएल डाल सकता है, लेकिन यह भी डेटाबेस के साथ अद्यतन XML में डेटा सिंक्रनाइज़ करने के लिए कुछ रखरखाव लिपियों की आवश्यकता होगी। " - WURFL एपीआई केवल एक बार पूर्ण एक्सएमएल को पार करता है, जब इसे प्रारंभ में लोड किया जाता है; बाद में लुकअप एक अनुक्रमित MySQL, MSSQL या डेटाबेस एपीआई के मामले में मोंगो डीबी के माध्यम से उपयोगकर्ता एजेंटों के एक छोटे समूह के खिलाफ किया जाता है, या। – SteveK

    +0

    @SteveK हाँ, यह पहले request.All अनुवर्ती अनुरोधों दृढ़ता और कैशिंग विन्यास config में परिभाषित के माध्यम से सेवा कर रहे हैं पर पार्स हो जाता है। – DhruvPathak

    0

    ने हाल ही में एक समान समस्या को हल करने का प्रयास किया है, इसके लिए ओपन सोर्स या शेल्फ समाधान के लिए इसका बेहतर उपयोग करना बेहतर है, क्योंकि आप अपने कोड को अद्यतित रखने के लिए एक लड़ाई में होंगे। व्यक्तिगत रूप से मैं मुफ्त में कोशिश करूंगा संस्करण, अगर ऐसा करता है जो आपको इसके साथ चिपकने की ज़रूरत है।

    आप अगर (strstr ($ _ सर्वर [ 'HTTP_USER_AGENT'], 'Android') || strstr ($ _ सर्वर [ 'HTTP_USER_AGENT'], 'webOS') || strstr ($ _ सर्वर की तरह कुछ कोशिश colud [ 'HTTP_USER_AGENT'], 'iPhone') || strstr ($ _ सर्वर [ 'HTTP_USER_AGENT'], 'आइपॉड') ) { // मोबाइल उपयोगकर्ता }

    अगर आप सिर्फ ओएस जानना चाहते हैं, यह सबसे लोकप्रिय पता लगाता है। तो, उचित रूप में दूसरों को जोड़ने नोकिया आदि के लिए

    http://www.concrete5.org/community/forums/customizing_c5/mobile-version/ एक और पूरी सूची

    आशा है कि यह मदद करता है हो रहा है।

    0

    इस होनहार लग रहा है और आप में चुन सकते हैं कि आप किस भाषा का पता लगाने कोड हैं: पीएचपी, जे एस या अपाचे, Nginx ... लेकिन हमेशा की तरह आप इसे परीक्षण करने के लिए की जरूरत है;) http://detectmobilebrowsers.com

    4
    <?php 
    // Include the browser php file that contains the class 
    require_once 'Browser1.php'; 
    
    $browserData = new Browser(); 
    // Output for testing purposes browser info 
    echo $browserData; 
    /* My laptop: 
    Browser Name:Firefox 
    Browser Version:10.0.2 
    Browser User Agent String:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2 
    Platform:Windows 
    */ 
    
    $browserMajorVersion = intval($browserData->getVersion()); 
    $browserName = $browserData->getBrowser(); 
    $css = 3; 
    if ($browserName == 'Internet Explorer' || $browserName == 'Opera') $css = 2; 
    echo '<p>Css version supported:'.$css.'</p>'; 
    // PHP Class file 
    <?php 
    class Browser { 
    private $_agent = ''; 
    private $_browser_name = ''; 
    private $_version = ''; 
    private $_platform = ''; 
    private $_os = ''; 
    private $_is_aol = false; 
    private $_is_mobile = false; 
    private $_is_robot = false; 
    private $_aol_version = ''; 
    
    const BROWSER_UNKNOWN = 'unknown'; 
    const VERSION_UNKNOWN = 'unknown'; 
    
    const BROWSER_OPERA = 'Opera';       // http://www.opera.com/ 
    const BROWSER_OPERA_MINI = 'Opera Mini';     // http://www.opera.com/mini/ 
    const BROWSER_WEBTV = 'WebTV';       // http://www.webtv.net/pc/ 
    const BROWSER_IE = 'Internet Explorer';     // http://www.microsoft.com/ie/ 
    const BROWSER_POCKET_IE = 'Pocket Internet Explorer';  // http://en.wikipedia.org/wiki/Internet_Explorer_Mobile 
    const BROWSER_KONQUEROR = 'Konqueror';     // http://www.konqueror.org/ 
    const BROWSER_ICAB = 'iCab';        // http://www.icab.de/ 
    const BROWSER_OMNIWEB = 'OmniWeb';      // http://www.omnigroup.com/applications/omniweb/ 
    const BROWSER_FIREBIRD = 'Firebird';      // http://www.ibphoenix.com/ 
    const BROWSER_FIREFOX = 'Firefox';      // http://www.mozilla.com/en-US/firefox/firefox.html 
    const BROWSER_ICEWEASEL = 'Iceweasel';     // http://www.geticeweasel.org/ 
    const BROWSER_SHIRETOKO = 'Shiretoko';     // http://wiki.mozilla.org/Projects/shiretoko 
    const BROWSER_MOZILLA = 'Mozilla';      // http://www.mozilla.com/en-US/ 
    const BROWSER_AMAYA = 'Amaya';       // http://www.w3.org/Amaya/ 
    const BROWSER_LYNX = 'Lynx';        // http://en.wikipedia.org/wiki/Lynx 
    const BROWSER_SAFARI = 'Safari';       // http://apple.com 
    const BROWSER_IPHONE = 'iPhone';       // http://apple.com 
    const BROWSER_IPOD = 'iPod';        // http://apple.com 
    const BROWSER_IPAD = 'iPad';        // http://apple.com 
    const BROWSER_CHROME = 'Chrome';       // http://www.google.com/chrome 
    const BROWSER_ANDROID = 'Android';      // http://www.android.com/ 
    const BROWSER_GOOGLEBOT = 'GoogleBot';     // http://en.wikipedia.org/wiki/Googlebot 
    const BROWSER_SLURP = 'Yahoo! Slurp';      // http://en.wikipedia.org/wiki/Yahoo!_Slurp 
    const BROWSER_W3CVALIDATOR = 'W3C Validator';    // http://validator.w3.org/ 
    const BROWSER_BLACKBERRY = 'BlackBerry';     // http://www.blackberry.com/ 
    const BROWSER_ICECAT = 'IceCat';       // http://en.wikipedia.org/wiki/GNU_IceCat 
    const BROWSER_NOKIA_S60 = 'Nokia S60 OSS Browser';  // http://en.wikipedia.org/wiki/Web_Browser_for_S60 
    const BROWSER_NOKIA = 'Nokia Browser';     // * all other WAP-based browsers on the Nokia Platform 
    const BROWSER_MSN = 'MSN Browser';      // http://explorer.msn.com/ 
    const BROWSER_MSNBOT = 'MSN Bot';       // http://search.msn.com/msnbot.htm 
                      // http://en.wikipedia.org/wiki/Msnbot (used for Bing as well) 
    
    const BROWSER_NETSCAPE_NAVIGATOR = 'Netscape Navigator'; // http://browser.netscape.com/ (DEPRECATED) 
    const BROWSER_GALEON = 'Galeon';       // http://galeon.sourceforge.net/ (DEPRECATED) 
    const BROWSER_NETPOSITIVE = 'NetPositive';    // http://en.wikipedia.org/wiki/NetPositive (DEPRECATED) 
    const BROWSER_PHOENIX = 'Phoenix';      // http://en.wikipedia.org/wiki/History_of_Mozilla_Firefox (DEPRECATED) 
    
    const PLATFORM_UNKNOWN = 'unknown'; 
    const PLATFORM_WINDOWS = 'Windows'; 
    const PLATFORM_WINDOWS_CE = 'Windows CE'; 
    const PLATFORM_APPLE = 'Apple'; 
    const PLATFORM_LINUX = 'Linux'; 
    const PLATFORM_OS2 = 'OS/2'; 
    const PLATFORM_BEOS = 'BeOS'; 
    const PLATFORM_IPHONE = 'iPhone'; 
    const PLATFORM_IPOD = 'iPod'; 
    const PLATFORM_IPAD = 'iPad'; 
    const PLATFORM_BLACKBERRY = 'BlackBerry'; 
    const PLATFORM_NOKIA = 'Nokia'; 
    const PLATFORM_FREEBSD = 'FreeBSD'; 
    const PLATFORM_OPENBSD = 'OpenBSD'; 
    const PLATFORM_NETBSD = 'NetBSD'; 
    const PLATFORM_SUNOS = 'SunOS'; 
    const PLATFORM_OPENSOLARIS = 'OpenSolaris'; 
    const PLATFORM_ANDROID = 'Android'; 
    
    const OPERATING_SYSTEM_UNKNOWN = 'unknown'; 
    
    public function Browser($useragent="") { 
        $this->reset(); 
        if($useragent != "") { 
         $this->setUserAgent($useragent); 
        } 
        else { 
         $this->determine(); 
        } 
    } 
    
    /** 
    * Reset all properties 
    */ 
    public function reset() { 
        $this->_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : ""; 
        $this->_browser_name = self::BROWSER_UNKNOWN; 
        $this->_version = self::VERSION_UNKNOWN; 
        $this->_platform = self::PLATFORM_UNKNOWN; 
        $this->_os = self::OPERATING_SYSTEM_UNKNOWN; 
        $this->_is_aol = false; 
        $this->_is_mobile = false; 
        $this->_is_robot = false; 
        $this->_aol_version = self::VERSION_UNKNOWN; 
    } 
    
    function isBrowser($browserName) { return(0 == strcasecmp($this->_browser_name, trim($browserName))); } 
    
    public function getBrowser() { return $this->_browser_name; } 
    public function setBrowser($browser) { return $this->_browser_name = $browser; } 
    public function getPlatform() { return $this->_platform; } 
    public function setPlatform($platform) { return $this->_platform = $platform; } 
    public function getVersion() { return $this->_version; } 
    public function setVersion($version) { $this->_version = preg_replace('/[^0-9,.,a-z,A-Z-]/','',$version); } 
    public function getAolVersion() { return $this->_aol_version; } 
    public function setAolVersion($version) { $this->_aol_version = preg_replace('/[^0-9,.,a-z,A-Z]/','',$version); } 
    public function isAol() { return $this->_is_aol; } 
    public function isMobile() { return $this->_is_mobile; } 
    public function isRobot() { return $this->_is_robot; } 
    public function setAol($isAol) { $this->_is_aol = $isAol; } 
    protected function setMobile($value=true) { $this->_is_mobile = $value; } 
    protected function setRobot($value=true) { $this->_is_robot = $value; } 
    public function getUserAgent() { return $this->_agent; } 
    public function setUserAgent($agent_string) { 
        $this->reset(); 
        $this->_agent = $agent_string; 
        $this->determine(); 
    } 
    public function isChromeFrame() { 
        return(strpos($this->_agent,"chromeframe") !== false); 
    } 
    public function __toString() { 
        return "<strong>Browser Name:</strong>{$this->getBrowser()}<br/>\n" . 
          "<strong>Browser Version:</strong>{$this->getVersion()}<br/>\n" . 
          "<strong>Browser User Agent String:</strong>{$this->getUserAgent()}<br/>\n" . 
          "<strong>Platform:</strong>{$this->getPlatform()}<br/>"; 
    } 
    protected function determine() { 
        $this->checkPlatform(); 
        $this->checkBrowsers(); 
        $this->checkForAol(); 
    } 
    protected function checkBrowsers() { 
        return (
         $this->checkBrowserWebTv() || 
         $this->checkBrowserInternetExplorer() || 
         $this->checkBrowserOpera() || 
         $this->checkBrowserGaleon() || 
         $this->checkBrowserNetscapeNavigator9Plus() || 
         $this->checkBrowserFirefox() || 
         $this->checkBrowserChrome() || 
         $this->checkBrowserOmniWeb() || 
    
         // common mobile 
         $this->checkBrowserAndroid() || 
         $this->checkBrowseriPad() || 
         $this->checkBrowseriPod() || 
         $this->checkBrowseriPhone() || 
         $this->checkBrowserBlackBerry() || 
         $this->checkBrowserNokia() || 
    
         // common bots 
         $this->checkBrowserGoogleBot() || 
         $this->checkBrowserMSNBot() || 
         $this->checkBrowserSlurp() || 
    
         // WebKit base check (post mobile and others) 
         $this->checkBrowserSafari() || 
    
         // everyone else 
         $this->checkBrowserNetPositive() || 
         $this->checkBrowserFirebird() || 
         $this->checkBrowserKonqueror() || 
         $this->checkBrowserIcab() || 
         $this->checkBrowserPhoenix() || 
         $this->checkBrowserAmaya() || 
         $this->checkBrowserLynx() || 
         $this->checkBrowserShiretoko() || 
         $this->checkBrowserIceCat() || 
         $this->checkBrowserW3CValidator() || 
         $this->checkBrowserMozilla() /* Mozilla is such an open standard that you must check it last */ 
        ); 
    } 
    protected function checkBrowserBlackBerry() { 
        if(stripos($this->_agent,'blackberry') !== false) { 
         $aresult = explode("/",stristr($this->_agent,"BlackBerry")); 
         $aversion = explode(' ',$aresult[1]); 
         $this->setVersion($aversion[0]); 
         $this->_browser_name = self::BROWSER_BLACKBERRY; 
         $this->setMobile(true); 
         return true; 
        } 
        return false; 
    } 
    protected function checkForAol() { 
        $this->setAol(false); 
        $this->setAolVersion(self::VERSION_UNKNOWN); 
    
        if(stripos($this->_agent,'aol') !== false) { 
         $aversion = explode(' ',stristr($this->_agent, 'AOL')); 
         $this->setAol(true); 
         $this->setAolVersion(preg_replace('/[^0-9\.a-z]/i', '', $aversion[1])); 
         return true; 
        } 
        return false; 
    } 
    protected function checkBrowserGoogleBot() { 
        if(stripos($this->_agent,'googlebot') !== false) { 
         $aresult = explode('/',stristr($this->_agent,'googlebot')); 
         $aversion = explode(' ',$aresult[1]); 
         $this->setVersion(str_replace(';','',$aversion[0])); 
         $this->_browser_name = self::BROWSER_GOOGLEBOT; 
         $this->setRobot(true); 
         return true; 
        } 
        return false; 
    } 
    protected function checkBrowserMSNBot() { 
        if(stripos($this->_agent,"msnbot") !== false) { 
         $aresult = explode("/",stristr($this->_agent,"msnbot")); 
         $aversion = explode(" ",$aresult[1]); 
         $this->setVersion(str_replace(";","",$aversion[0])); 
         $this->_browser_name = self::BROWSER_MSNBOT; 
         $this->setRobot(true); 
         return true; 
        } 
        return false; 
    } 
    protected function checkBrowserW3CValidator() { 
        if(stripos($this->_agent,'W3C-checklink') !== false) { 
         $aresult = explode('/',stristr($this->_agent,'W3C-checklink')); 
         $aversion = explode(' ',$aresult[1]); 
         $this->setVersion($aversion[0]); 
         $this->_browser_name = self::BROWSER_W3CVALIDATOR; 
         return true; 
        } 
        else if(stripos($this->_agent,'W3C_Validator') !== false) { 
         // Some of the Validator versions do not delineate w/ a slash - add it back in 
         $ua = str_replace("W3C_Validator ", "W3C_Validator/", $this->_agent); 
         $aresult = explode('/',stristr($ua,'W3C_Validator')); 
         $aversion = explode(' ',$aresult[1]); 
         $this->setVersion($aversion[0]); 
         $this->_browser_name = self::BROWSER_W3CVALIDATOR; 
         return true; 
        } 
        return false; 
    } 
    protected function checkBrowserSlurp() { 
        if(stripos($this->_agent,'slurp') !== false) { 
         $aresult = explode('/',stristr($this->_agent,'Slurp')); 
         $aversion = explode(' ',$aresult[1]); 
         $this->setVersion($aversion[0]); 
         $this->_browser_name = self::BROWSER_SLURP; 
         $this->setRobot(true); 
         $this->setMobile(false); 
         return true; 
        } 
        return false; 
    } 
    protected function checkBrowserInternetExplorer() { 
    
        if(stripos($this->_agent,'microsoft internet explorer') !== false) { 
         $this->setBrowser(self::BROWSER_IE); 
         $this->setVersion('1.0'); 
         $aresult = stristr($this->_agent, '/'); 
         if(preg_match('/308|425|426|474|0b1/i', $aresult)) { 
          $this->setVersion('1.5'); 
         } 
         return true; 
        } 
        else if(stripos($this->_agent,'msie') !== false && stripos($this->_agent,'opera') === false) { 
         if(stripos($this->_agent,'msnb') !== false) { 
          $aresult = explode(' ',stristr(str_replace(';','; ',$this->_agent),'MSN')); 
          $this->setBrowser(self::BROWSER_MSN); 
          $this->setVersion(str_replace(array('(',')',';'),'',$aresult[1])); 
          return true; 
         } 
         $aresult = explode(' ',stristr(str_replace(';','; ',$this->_agent),'msie')); 
         $this->setBrowser(self::BROWSER_IE); 
         $this->setVersion(str_replace(array('(',')',';'),'',$aresult[1])); 
         return true; 
        } 
        else if(stripos($this->_agent,'mspie') !== false || stripos($this->_agent,'pocket') !== false) { 
         $aresult = explode(' ',stristr($this->_agent,'mspie')); 
         $this->setPlatform(self::PLATFORM_WINDOWS_CE); 
         $this->setBrowser(self::BROWSER_POCKET_IE); 
         $this->setMobile(true); 
    
         if(stripos($this->_agent,'mspie') !== false) { 
          $this->setVersion($aresult[1]); 
         } 
         else { 
          $aversion = explode('/',$this->_agent); 
          $this->setVersion($aversion[1]); 
         } 
         return true; 
        } 
        return false; 
    } 
    protected function checkBrowserOpera() { 
        if(stripos($this->_agent,'opera mini') !== false) { 
         $resultant = stristr($this->_agent, 'opera mini'); 
         if(preg_match('/\//',$resultant)) { 
          $aresult = explode('/',$resultant); 
          $aversion = explode(' ',$aresult[1]); 
          $this->setVersion($aversion[0]); 
         } 
         else { 
          $aversion = explode(' ',stristr($resultant,'opera mini')); 
          $this->setVersion($aversion[1]); 
         } 
         $this->_browser_name = self::BROWSER_OPERA_MINI; 
         $this->setMobile(true); 
         return true; 
        } 
        else if(stripos($this->_agent,'opera') !== false) { 
         $resultant = stristr($this->_agent, 'opera'); 
         if(preg_match('/Version\/(11.*)$/',$resultant,$matches)) { 
          $this->setVersion($matches[1]); 
         } 
         else if(preg_match('/Version\/(10.*)$/',$resultant,$matches)) { 
          $this->setVersion($matches[1]); 
         } 
         else if(preg_match('/\//',$resultant)) { 
          $aresult = explode('/',str_replace("("," ",$resultant)); 
          $aversion = explode(' ',$aresult[1]); 
          $this->setVersion($aversion[0]); 
         } 
         else { 
          $aversion = explode(' ',stristr($resultant,'opera')); 
          $this->setVersion(isset($aversion[1])?$aversion[1]:""); 
         } 
         $this->_browser_name = self::BROWSER_OPERA; 
         return true; 
        } 
        return false; 
    } 
    protected function checkBrowserChrome() { 
        if(stripos($this->_agent,'Chrome') !== false) { 
         $aresult = explode('/',stristr($this->_agent,'Chrome')); 
         $aversion = explode(' ',$aresult[1]); 
         $this->setVersion($aversion[0]); 
         $this->setBrowser(self::BROWSER_CHROME); 
         return true; 
        } 
        return false; 
    } 
    protected function checkBrowserWebTv() { 
        if(stripos($this->_agent,'webtv') !== false) { 
         $aresult = explode('/',stristr($this->_agent,'webtv')); 
         $aversion = explode(' ',$aresult[1]); 
         $this->setVersion($aversion[0]); 
         $this->setBrowser(self::BROWSER_WEBTV); 
         return true; 
        } 
        return false; 
    } 
    protected function checkBrowserNetPositive() { 
        if(stripos($this->_agent,'NetPositive') !== false) { 
         $aresult = explode('/',stristr($this->_agent,'NetPositive')); 
         $aversion = explode(' ',$aresult[1]); 
         $this->setVersion(str_replace(array('(',')',';'),'',$aversion[0])); 
         $this->setBrowser(self::BROWSER_NETPOSITIVE); 
         return true; 
        } 
        return false; 
    } 
    protected function checkBrowserGaleon() { 
        if(stripos($this->_agent,'galeon') !== false) { 
         $aresult = explode(' ',stristr($this->_agent,'galeon')); 
         $aversion = explode('/',$aresult[0]); 
         $this->setVersion($aversion[1]); 
         $this->setBrowser(self::BROWSER_GALEON); 
         return true; 
        } 
        return false; 
    } 
    protected function checkBrowserKonqueror() { 
        if(stripos($this->_agent,'Konqueror') !== false) { 
         $aresult = explode(' ',stristr($this->_agent,'Konqueror')); 
         $aversion = explode('/',$aresult[0]); 
         $this->setVersion($aversion[1]); 
         $this->setBrowser(self::BROWSER_KONQUEROR); 
         return true; 
        } 
        return false; 
    } 
    protected function checkBrowserIcab() { 
        if(stripos($this->_agent,'icab') !== false) { 
         $aversion = explode(' ',stristr(str_replace('/',' ',$this->_agent),'icab')); 
         $this->setVersion($aversion[1]); 
         $this->setBrowser(self::BROWSER_ICAB); 
         return true; 
        } 
        return false; 
    } 
    protected function checkBrowserOmniWeb() { 
        if(stripos($this->_agent,'omniweb') !== false) { 
         $aresult = explode('/',stristr($this->_agent,'omniweb')); 
         $aversion = explode(' ',isset($aresult[1])?$aresult[1]:""); 
         $this->setVersion($aversion[0]); 
         $this->setBrowser(self::BROWSER_OMNIWEB); 
         return true; 
        } 
        return false; 
    } 
    protected function checkBrowserPhoenix() { 
        if(stripos($this->_agent,'Phoenix') !== false) { 
         $aversion = explode('/',stristr($this->_agent,'Phoenix')); 
         $this->setVersion($aversion[1]); 
         $this->setBrowser(self::BROWSER_PHOENIX); 
         return true; 
        } 
        return false; 
    } 
    protected function checkBrowserFirebird() { 
        if(stripos($this->_agent,'Firebird') !== false) { 
         $aversion = explode('/',stristr($this->_agent,'Firebird')); 
         $this->setVersion($aversion[1]); 
         $this->setBrowser(self::BROWSER_FIREBIRD); 
         return true; 
        } 
        return false; 
    } 
    protected function checkBrowserNetscapeNavigator9Plus() { 
        if(stripos($this->_agent,'Firefox') !== false && preg_match('/Navigator\/([^ ]*)/i',$this->_agent,$matches)) { 
         $this->setVersion($matches[1]); 
         $this->setBrowser(self::BROWSER_NETSCAPE_NAVIGATOR); 
         return true; 
        } 
        else if(stripos($this->_agent,'Firefox') === false && preg_match('/Netscape6?\/([^ ]*)/i',$this->_agent,$matches)) { 
         $this->setVersion($matches[1]); 
         $this->setBrowser(self::BROWSER_NETSCAPE_NAVIGATOR); 
         return true; 
        } 
        return false; 
    } 
    protected function checkBrowserShiretoko() { 
        if(stripos($this->_agent,'Mozilla') !== false && preg_match('/Shiretoko\/([^ ]*)/i',$this->_agent,$matches)) { 
         $this->setVersion($matches[1]); 
         $this->setBrowser(self::BROWSER_SHIRETOKO); 
         return true; 
        } 
        return false; 
    } 
    protected function checkBrowserIceCat() { 
        if(stripos($this->_agent,'Mozilla') !== false && preg_match('/IceCat\/([^ ]*)/i',$this->_agent,$matches)) { 
         $this->setVersion($matches[1]); 
         $this->setBrowser(self::BROWSER_ICECAT); 
         return true; 
        } 
        return false; 
    } 
    protected function checkBrowserNokia() { 
        if(preg_match("/Nokia([^\/]+)\/([^ SP]+)/i",$this->_agent,$matches)) { 
         $this->setVersion($matches[2]); 
         if(stripos($this->_agent,'Series60') !== false || strpos($this->_agent,'S60') !== false) { 
          $this->setBrowser(self::BROWSER_NOKIA_S60); 
         } 
         else { 
          $this->setBrowser(self::BROWSER_NOKIA); 
         } 
         $this->setMobile(true); 
         return true; 
        } 
        return false; 
    } 
    protected function checkBrowserFirefox() { 
        if(stripos($this->_agent,'safari') === false) { 
         if(preg_match("/Firefox[\/ \(]([^ ;\)]+)/i",$this->_agent,$matches)) { 
          $this->setVersion($matches[1]); 
          $this->setBrowser(self::BROWSER_FIREFOX); 
          return true; 
         } 
         else if(preg_match("/Firefox$/i",$this->_agent,$matches)) { 
          $this->setVersion(""); 
          $this->setBrowser(self::BROWSER_FIREFOX); 
          return true; 
         } 
        } 
        return false; 
    } 
    protected function checkBrowserIceweasel() { 
        if(stripos($this->_agent,'Iceweasel') !== false) { 
         $aresult = explode('/',stristr($this->_agent,'Iceweasel')); 
         $aversion = explode(' ',$aresult[1]); 
         $this->setVersion($aversion[0]); 
         $this->setBrowser(self::BROWSER_ICEWEASEL); 
         return true; 
        } 
        return false; 
    } 
    protected function checkBrowserMozilla() { 
        if(stripos($this->_agent,'mozilla') !== false && preg_match('/rv:[0-9].[0-9][a-b]?/i',$this->_agent) && stripos($this->_agent,'netscape') === false) { 
         $aversion = explode(' ',stristr($this->_agent,'rv:')); 
         preg_match('/rv:[0-9].[0-9][a-b]?/i',$this->_agent,$aversion); 
         $this->setVersion(str_replace('rv:','',$aversion[0])); 
         $this->setBrowser(self::BROWSER_MOZILLA); 
         return true; 
        } 
        else if(stripos($this->_agent,'mozilla') !== false && preg_match('/rv:[0-9]\.[0-9]/i',$this->_agent) && stripos($this->_agent,'netscape') === false) { 
         $aversion = explode('',stristr($this->_agent,'rv:')); 
         $this->setVersion(str_replace('rv:','',$aversion[0])); 
         $this->setBrowser(self::BROWSER_MOZILLA); 
         return true; 
        } 
        else if(stripos($this->_agent,'mozilla') !== false && preg_match('/mozilla\/([^ ]*)/i',$this->_agent,$matches) && stripos($this->_agent,'netscape') === false) { 
         $this->setVersion($matches[1]); 
         $this->setBrowser(self::BROWSER_MOZILLA); 
         return true; 
        } 
        return false; 
    } 
    protected function checkBrowserLynx() { 
        if(stripos($this->_agent,'lynx') !== false) { 
         $aresult = explode('/',stristr($this->_agent,'Lynx')); 
         $aversion = explode(' ',(isset($aresult[1])?$aresult[1]:"")); 
         $this->setVersion($aversion[0]); 
         $this->setBrowser(self::BROWSER_LYNX); 
         return true; 
        } 
        return false; 
    } 
    protected function checkBrowserAmaya() { 
        if(stripos($this->_agent,'amaya') !== false) { 
         $aresult = explode('/',stristr($this->_agent,'Amaya')); 
         $aversion = explode(' ',$aresult[1]); 
         $this->setVersion($aversion[0]); 
         $this->setBrowser(self::BROWSER_AMAYA); 
         return true; 
        } 
        return false; 
    } 
    
    protected function checkBrowserSafari() { 
        if(stripos($this->_agent,'Safari') !== false && stripos($this->_agent,'iPhone') === false && stripos($this->_agent,'iPod') === false) { 
         $aresult = explode('/',stristr($this->_agent,'Version')); 
         if(isset($aresult[1])) { 
          $aversion = explode(' ',$aresult[1]); 
          $this->setVersion($aversion[0]); 
         } 
         else { 
          $this->setVersion(self::VERSION_UNKNOWN); 
         } 
         $this->setBrowser(self::BROWSER_SAFARI); 
         return true; 
        } 
        return false; 
    } 
    
    protected function checkBrowseriPhone() { 
        if(stripos($this->_agent,'iPhone') !== false) { 
         $aresult = explode('/',stristr($this->_agent,'Version')); 
         if(isset($aresult[1])) { 
          $aversion = explode(' ',$aresult[1]); 
          $this->setVersion($aversion[0]); 
         } 
         else { 
          $this->setVersion(self::VERSION_UNKNOWN); 
         } 
         $this->setMobile(true); 
         $this->setBrowser(self::BROWSER_IPHONE); 
         return true; 
        } 
        return false; 
    } 
    protected function checkBrowseriPad() { 
        if(stripos($this->_agent,'iPad') !== false) { 
         $aresult = explode('/',stristr($this->_agent,'Version')); 
         if(isset($aresult[1])) { 
          $aversion = explode(' ',$aresult[1]); 
          $this->setVersion($aversion[0]); 
         } 
         else { 
          $this->setVersion(self::VERSION_UNKNOWN); 
         } 
         $this->setMobile(true); 
         $this->setBrowser(self::BROWSER_IPAD); 
         return true; 
        } 
        return false; 
    } 
    protected function checkBrowseriPod() { 
        if(stripos($this->_agent,'iPod') !== false) { 
         $aresult = explode('/',stristr($this->_agent,'Version')); 
         if(isset($aresult[1])) { 
          $aversion = explode(' ',$aresult[1]); 
          $this->setVersion($aversion[0]); 
         } 
         else { 
          $this->setVersion(self::VERSION_UNKNOWN); 
         } 
         $this->setMobile(true); 
         $this->setBrowser(self::BROWSER_IPOD); 
         return true; 
        } 
        return false; 
    } 
    
    protected function checkBrowserAndroid() { 
        if(stripos($this->_agent,'Android') !== false) { 
         $aresult = explode(' ',stristr($this->_agent,'Android')); 
         if(isset($aresult[1])) { 
          $aversion = explode(' ',$aresult[1]); 
          $this->setVersion($aversion[0]); 
         } 
         else { 
          $this->setVersion(self::VERSION_UNKNOWN); 
         } 
         $this->setMobile(true); 
         $this->setBrowser(self::BROWSER_ANDROID); 
         return true; 
        } 
        return false; 
    } 
    protected function checkPlatform() { 
        if(stripos($this->_agent, 'windows') !== false) { 
         $this->_platform = self::PLATFORM_WINDOWS; 
        } 
        else if(stripos($this->_agent, 'iPad') !== false) { 
         $this->_platform = self::PLATFORM_IPAD; 
        } 
        else if(stripos($this->_agent, 'iPod') !== false) { 
         $this->_platform = self::PLATFORM_IPOD; 
        } 
        else if(stripos($this->_agent, 'iPhone') !== false) { 
         $this->_platform = self::PLATFORM_IPHONE; 
        } 
        elseif(stripos($this->_agent, 'mac') !== false) { 
         $this->_platform = self::PLATFORM_APPLE; 
        } 
        elseif(stripos($this->_agent, 'android') !== false) { 
         $this->_platform = self::PLATFORM_ANDROID; 
        } 
        elseif(stripos($this->_agent, 'linux') !== false) { 
         $this->_platform = self::PLATFORM_LINUX; 
        } 
        else if(stripos($this->_agent, 'Nokia') !== false) { 
         $this->_platform = self::PLATFORM_NOKIA; 
        } 
        else if(stripos($this->_agent, 'BlackBerry') !== false) { 
         $this->_platform = self::PLATFORM_BLACKBERRY; 
        } 
        elseif(stripos($this->_agent,'FreeBSD') !== false) { 
         $this->_platform = self::PLATFORM_FREEBSD; 
        } 
        elseif(stripos($this->_agent,'OpenBSD') !== false) { 
         $this->_platform = self::PLATFORM_OPENBSD; 
        } 
        elseif(stripos($this->_agent,'NetBSD') !== false) { 
         $this->_platform = self::PLATFORM_NETBSD; 
        } 
        elseif(stripos($this->_agent, 'OpenSolaris') !== false) { 
         $this->_platform = self::PLATFORM_OPENSOLARIS; 
        } 
        elseif(stripos($this->_agent, 'SunOS') !== false) { 
         $this->_platform = self::PLATFORM_SUNOS; 
        } 
        elseif(stripos($this->_agent, 'OS\/2') !== false) { 
         $this->_platform = self::PLATFORM_OS2; 
        } 
        elseif(stripos($this->_agent, 'BeOS') !== false) { 
         $this->_platform = self::PLATFORM_BEOS; 
        } 
        elseif(stripos($this->_agent, 'win') !== false) { 
         $this->_platform = self::PLATFORM_WINDOWS; 
        } 
    
    } 
    } 
    ?> 
    
    +0

    उपयोग तकनीक WURFL की तरह भी – Starx

    +1

    यह निर्माता और मॉडल जानकारी प्रदान नहीं करता शामिल करें। उदाहरण के लिए यह मुझे नहीं बताएगा कि नोकिया 3100 डिवाइस से कोई अनुरोध आया है या नहीं। – DhruvPathak

    0

    यह लागू करने के लिए मुश्किल नहीं है, जाँच http://detectmobilebrowsers.mobi/#download

    आप और अधिक डेटा चाहते हैं, पहले, अगर इसकी वास्तव में जरूरी जाँच अगर आपको वेबसाइट की तरह एक मोबाइल एनालिटिक्स बनाने के लिए योजना बना रहे हैं, here's क्यों:

    मोबाइल्स हो सकता है:

    • स्मार्टफोन, जो एचटीएमएल 5 संभाल/CSS3/जावास्क्रिप्ट और कभी कभी भी फ़्लैश

    • टेबलेट, ऊपर, लेकिन एक बड़ी स्क्रीन witha के रूप में ही समर्थन करते हैं, अधिक
      इंटरफ़ेस संभावनाओं

    • मध्यम फोन पर, उनके पास मूल इंटरनेट तक पहुंच है, कुछ ऐप्स फेसबुक, ट्विटर इत्यादि से कनेक्ट करने के लिए, लेकिन पूरी तरह सक्षम नहीं brows एर

    • हलके-स्तर फोन, वे एक WAP ब्राउज़र, बहुत धीमी गति से इंटरनेट कनेक्शन

    तो अगर आप उन्हें इस 4 अलग-अलग समूहों में विभाजित कर सकते हैं है, कि आपके आवेदन के लिए enought किया जाना चाहिए की जरूरत है।

    Here's कुछ दिलचस्प लिंक है, कि तुम में मदद मिलेगी, यह सरल रखें, और क्या आप क्या करना चाहते करने के लिए:

    सौभाग्य!

    +0

    यह समस्या का समाधान नहीं करता है क्योंकि यह फोन निर्माता और मॉडल का पता नहीं लगाता है। – DhruvPathak

    0

    मैं पिछले जो WURFL कार्यान्वित में एक सामग्री वितरण प्रणाली पर काम किया। मुझे ठीक लगता है, मुद्दों कभी नहीं था!

    0

    मैं अपनी परियोजनाओं में इस पीएचपी वर्ग का उपयोग करें:

    http://code.google.com/p/mobileesp/source/browse/PHP/mdetect.php

    यह बहुत बहुत अच्छी तरह से काम करता है। यह आसान है, कोई डीबी नहीं, कोई रिमोट एपीआई नहीं, कोई बड़ी फाइल नहीं है।

    +0

    यह केवल उपयोगकर्ता एजेंट का ओएस पता लगाता है डिवाइस नाम और मॉडल पर कोई जानकारी नहीं। – DhruvPathak

    2

    WURFL यहाँ कई बार पहले से ही उल्लेख किया गया है, लेकिन आप नए WURFL बादल सेवा पर एक नज़र रखना चाहिए - यह WURFL एपीआई, WURFL टीम द्वारा बनाए रखा का एक होस्ट किया गया संस्करण है और एक नि: शुल्क योजना है कि के अनुरूप बन शामिल अपने की जरूरत है।

    <?php 
    require_once '../Client/Client.php'; 
    $config = new WurflCloud_Client_Config(); 
    $config->api_key = 'xxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; 
    $client = new WurflCloud_Client_Client($config); 
    $client->detectDevice(); 
    $brand = $client->getDeviceCapability('brand_name'); 
    $model = $client->getDeviceCapability('model_name'); 
    if ($client->getDeviceCapability('ux_full_desktop')) { 
        echo "This is a desktop web browser"; 
    } else { 
        echo "This is a $brand $model"; 
    } 
    

    getting started guide और WURFL Cloud page की जाँच करना सुनिश्चित करें:

    यहाँ पीएचपी WURFL बादल क्लाइंट के प्रयोग की एक त्वरित पीएचपी उदाहरण है।

    +0

    इस एपीआई का प्रदर्शन कैसा है? चूंकि एक एपीआई कॉल प्रति नेटवर्क अनुरोध एक बोतल गर्दन प्रतीत होता है – DhruvPathak

    +0

    निश्चित रूप से क्लाउड-आधारित सेवा के साथ, नेटवर्क की बाधा होती है, लेकिन क्लाइंट कुकी कैशिंग का उपयोग करता है, इसलिए उसी उपयोगकर्ता द्वारा बाद के पृष्ठ दृश्य कैश किए जाते हैं और एक लुकअप होते हैं बादल की जरूरत नहीं है। नेटवर्क विलंबता काफी कम है - आमतौर पर अमेरिका और यूरोप में लगभग 100ms, निश्चित रूप से यह आपके स्थान और प्रदाता पर निर्भर करता है। यदि आपको उच्च प्रदर्शन की आवश्यकता है, तो आप हमेशा स्टैंडअलोन एपीआई आज़मा सकते हैं। PHP के लिए दो WURFL एपीआई हैं - PHP API और डेटाबेस API (पूर्व में टेरा-WURFL)। – SteveK

    संबंधित मुद्दे