2012-03-01 7 views
7

Requisito: Per individuare il telefono utilizzato dall'utente analizzando la stringa dell'agente utente dal proprio browser. (In PHP) es. Nokia 1100, Samsung D900.Errore nella stringa dell'agente utente del telefono cellulare, buona soluzione o libreria?

Esiste una buona libreria disponibile con un database sufficiente di venditori telefonici e modelli?

Alcune soluzioni che ho trovato, bisogno del vostro punto di vista sulla stessa:

i) handsetdetection: https://www.handsetdetection.com - abbonamento a pagamento

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

iii) soluzione Own - Ho un piccolo database di produttori di telefoni e modelli, ma dovrò aggiungere controlli su misura per le stringhe degli user agent nel mio codice per far corrispondere/fuzzy a ottenere il database come formato stringa agente utente non è coerente tra i produttori.

UPDATE:

Abbiamo creato una soluzione su misura, che era un mix di espressioni regolari per Parise agenti utente standard come iOS, Android, Blackberry, e WURFL come un meccanismo di ripiego per altri telefoni come Symbian, J2ME, bada ecc

WURFL funziona perfettamente dopo l'aggiunta di database/cache (MySql, memcached, mongodb ecc.) Già esistente come impostazione nella base di codice core. poche settimane per rimanere aggiornato con le specifiche dei nuovi telefoni cellulari rilasciati.

risposta

10

In primo luogo, Direi KISS (Keep It Simple, Stupid) che è un'espressione ampiamente usata per una ragione. Comincerei con il doppio controllo delle mie esigenze di business e vedrò di quante informazioni sul dispositivo ho veramente bisogno e di cosa ho intenzione di usarlo. Forse hai solo bisogno di vedere quale motore di rendering sta usando il client?

In secondo luogo, è necessario considerare il tempo di analisi. Se si finisce per utilizzare WURFL e si analizza il codice XML sul proprio sito, è necessario analizzare 400  000+ righe di XML durante il controllo delle informazioni sul dispositivo. Ovviamente, è possibile inserire l'XML in un database indicizzato locale, ma ciò richiederebbe anche alcuni script di manutenzione per sincronizzare i dati nell'XML aggiornato con il database.

Terzo (ma forse dovrebbe essere il primo?) Sta valutando il rapporto costi/benefici della soluzione. Se guadagni soldi sul sito, potrebbe essere intelligente lasciare delle responsabilità a un partner. Un servizio di hosting come handsetdetection.com sembra in grado di fornire traffico elevato a un costo non terrificante. Un altro vantaggio è che sono responsabili della manutenzione del proprio repository e potrebbero perdere clienti se il loro servizio non è abbastanza buono. La comunità OpenSource potrebbe teoricamente andare su una vacanza di 4 mesi e l'anima non sarebbe mantenuta in quel periodo (non penserei che dovrebbe essere qualcosa di cui preoccuparsi ;-)

Non conoscendo le tue esigenze, io avrebbe la priorità in questo modo:

  1. Uso come semplice una soluzione possibile, vale a dire la soluzione dalla Detect Mobile Browsers
  2. Go OpenSource, come WURFL. Adoro soluzioni OpenSource :-)
  3. Se le vostre esigenze di business garantito la stabilità e la qualità dei dati, si dovrebbe lasciare che i professionisti di gestire lo ;-)
+0

Non riesco proprio a competere per togliere il premio a una risposta così brillante! Continuate così! : ^) –

+0

> "In secondo luogo, dovresti considerare il tempo di analisi. Se finisci per utilizzare WURFL e analizzare il codice XML sul tuo sito, dovresti analizzare oltre 400.000 righe di XML durante il controllo delle informazioni sul dispositivo. è possibile inserire l'XML in un database indicizzato locale, ma ciò richiederebbe anche alcuni script di manutenzione per sincronizzare i dati nell'XML aggiornato con il database. " - L'API WURFL analizza solo l'XML completo una volta, quando viene inizialmente caricato; le ricerche successive vengono eseguite su un piccolo insieme di programmi utente, o tramite un indice MySQL, MSSQL o Mongo DB nel caso dell'API Database. – SteveK

+0

@SteveK Sì, viene analizzato alla prima richiesta. Tutte le richieste successive vengono pubblicate tramite le configurazioni di persistenza e memorizzazione nella cache definite nella configurazione. – DhruvPathak

0

ha recentemente provato a risolvere un problema simile, è molto meglio usare una soluzione open source o off the shelf per questo, dato che sarai in una battaglia per mantenere il tuo codice aggiornato ecc. Personalmente proverei il libero versione, se fa quello che ti serve bastone con esso.

si colud provare qualcosa di simile se (strstr ($ _ SERVER [ 'HTTP_USER_AGENT'], 'Android') || strstr ($ _ SERVER [ 'HTTP_USER_AGENT'], 'webOS') || strstr ($ _ SERVER [ 'HTTP_USER_AGENT'], 'iPhone') || strstr ($ _ SERVER [ 'HTTP_USER_AGENT'], 'iPod') ) {// utente mobile }

se avete solo bisogno di conoscere il sistema operativo, rileva il più popolare. quindi aggiungere gli altri a seconda dei casi, per Nokia ecc

http://www.concrete5.org/community/forums/customizing_c5/mobile-version/ sembra essere un elenco più completo

speranza che questo aiuti.

0

Questo sembra essere molto promettente e si può scegliere in quale lingua si desidera che il codice di rilevamento: PHP, JS o Apache, Nginx ... ma come sempre è necessario testarlo;) 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

Includere anche le tecniche di utilizzo – Starx

+1

Questo non fornisce informazioni sul produttore e sul modello come fa WURFL. es. Questo non mi dirà se una richiesta proviene dal dispositivo Nokia 3100. – DhruvPathak

0

Questo non è difficile da implementare, controllare http://detectmobilebrowsers.mobi/#download

Se si vuole più dati, in primo luogo, verificare se è davvero necessario, a meno che non si prevede di creare un analytics mobile come sito web, ecco perché:

Mobiles possono essere:

  • Smartphone, che trattano HTML5/CSS3/JavaScript e talvolta anche lampo

  • Compresse, supporto come sopra ma servivano uno schermo più grande, più
    possibilità interfaccia

  • medie -end telefoni, hanno accesso a Internet di base, alcune app per connettersi a Facebook, Twitter, ecc, ma non è completamente in grado di leggere le sopracciglia er

  • cellulari di fascia bassa, hanno un browser WAP, molto lento internet connessioni

Quindi, se è possibile separare in questo 4 gruppi diversi, che dovrebbero essere sufficienti per la vostra applicazione esigenze.

Here's alcuni link interessanti, che vi aiuterà, per mantenere le cose semplici, e fare ciò che si vuole fare:

In bocca al lupo!

+0

Questo non risolve il problema in quanto non rileva il produttore del telefono e il modello. – DhruvPathak

0

Ho lavorato a un sistema di distribuzione di contenuti in passato che ha implementato WURFL. Sembrava OK per me, non ha mai avuto problemi!

2

WURFL è già stato menzionato qui alcune volte, ma dovresti dare un'occhiata al nuovo servizio WURFL Cloud: è una versione ospitata dell'API WURFL, gestita dal team WURFL e include un piano gratuito adatto al tuo esigenze.

Ecco un esempio veloce PHP di utilizzare il client PHP WURFL Cloud:

<?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"; 
} 

Assicuratevi di controllare le getting started guide e WURFL Cloud page.

+0

Com'è la performance di questa api? Poiché una richiesta di rete per chiamata api sembra essere un collo di bottiglia – DhruvPathak

+0

Certamente con un servizio basato su cloud, il collo di bottiglia della rete è presente, ma il client utilizza la cache dei cookie, quindi le successive visualizzazioni di pagina dello stesso utente vengono memorizzate nella cache e una il cloud non è necessario La latenza della rete è piuttosto bassa, di solito circa 100ms negli Stati Uniti e in Europa, ovviamente dipende dalla posizione e dal fornitore. Se hai bisogno di prestazioni più elevate, puoi sempre provare le API standalone. Ci sono due API WURFL per PHP: l'API PHP e l'API Database (precedentemente Tera-WURFL). – SteveK

Problemi correlati