Created
August 10, 2012 14:39
-
-
Save pablolmiranda/3314706 to your computer and use it in GitHub Desktop.
Mobile Detection
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Mobile Detect | |
* @license http://www.opensource.org/licenses/mit-license.php The MIT License | |
*/ | |
class MobileDetect | |
{ | |
protected $accept; | |
protected $userAgent; | |
protected $isMobile = false; | |
protected $isAndroid = null; | |
protected $isAndroidtablet = null; | |
protected $isIphone = null; | |
protected $isIpad = null; | |
protected $isBlackberry = null; | |
protected $isBlackberrytablet = null; | |
protected $isOpera = null; | |
protected $isPalm = null; | |
protected $isWindows = null; | |
protected $isWindowsphone = null; | |
protected $isGeneric = null; | |
protected $devices = array( | |
"android" => "android.*mobile", | |
"androidtablet" => "android(?!.*mobile)", | |
"blackberry" => "blackberry", | |
"blackberrytablet" => "rim tablet os", | |
"iphone" => "(iphone|ipod)", | |
"ipad" => "(ipad)", | |
"palm" => "(avantgo|blazer|elaine|hiptop|palm|plucker|xiino)", | |
"windows" => "windows ce; (iemobile|ppc|smartphone)", | |
"windowsphone" => "windows phone os", | |
"generic" => "(kindle|mobile|mmp|midp|pocket|psp|symbian|smartphone|treo|up.browser|up.link|vodafone|wap|opera mini)" | |
); | |
public function __construct() | |
{ | |
$this->userAgent = array_key_exists('HTTP_USER_AGENT', $_SERVER)? $_SERVER['HTTP_USER_AGENT'] : ''; | |
$this->accept = array_key_exists('HTTP_ACCEPT', $_SERVER)? $_SERVER['HTTP_ACCEPT'] : ''; | |
if (isset($_SERVER['HTTP_X_WAP_PROFILE']) || isset($_SERVER['HTTP_PROFILE'])) { | |
$this->isMobile = true; | |
} elseif (strpos($this->accept, 'text/vnd.wap.wml') !== FALSE || strpos($this->accept, 'application/vnd.wap.xhtml+xml') !== FALSE) { | |
$this->isMobile = true; | |
} else { | |
foreach ($this->devices as $device => $regexp) { | |
if ($this->isDevice($device)) { | |
$this->isMobile = true; | |
} | |
} | |
} | |
} | |
/** | |
* Overloads isAndroid() | isAndroidtablet() | isIphone() | isIpad() | isBlackberry() | isBlackberrytablet() | isPalm() | isWindowsphone() | isWindows() | isGeneric() through isDevice() | |
* | |
* @param string $name | |
* @param array $arguments | |
* @return bool | |
*/ | |
public function __call($name, $arguments) | |
{ | |
$device = substr($name, 2); | |
if ($name == "is" . ucfirst($device) && array_key_exists(strtolower($device), $this->devices)) { | |
return $this->isDevice($device); | |
} else { | |
throw new \Exception("Method $name not defined"); | |
} | |
} | |
/** | |
* Returns true if any type of mobile device detected, including special ones | |
* @return bool | |
*/ | |
public function isMobile() | |
{ | |
return $this->isMobile; | |
} | |
protected function isDevice($device) | |
{ | |
$var = "is" . ucfirst($device); | |
$return = $this->$var === null ? (bool) preg_match("/" . $this->devices[strtolower($device)] . "/i", $this->userAgent) : $this->$var; | |
if ($device != 'generic' && $return == true) { | |
$this->isGeneric = false; | |
} | |
return $return; | |
} | |
public function isPhone() { | |
return $this->isMobile() && ! $this->isTablet(); | |
} | |
public function isTablet() { | |
return $this->isIpad() || $this->isAndroidtablet() || $this->isBlackberrytablet(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment