Skip to content

Instantly share code, notes, and snippets.

@hbsnow
Last active November 14, 2016 02:13
Show Gist options
  • Star 7 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hbsnow/4667353 to your computer and use it in GitHub Desktop.
Save hbsnow/4667353 to your computer and use it in GitHub Desktop.
PHPでブラウザを振り分けるクラス。振り分けそのものはそこまで厳密なものではなく、IEをのぞくほとんどのブラウザのユーザは常に最新のブラウザを使用していると想定している。
<?php
/**
* ブラウザをゆるく判別
*
* @version 1.2.2
*/
class CheckBrowser
{
/**
* IEのバージョンを整数値で取得する
*
* @return int IEならば1以上の整数値、そうでなければ0
*/
public static function getIEVersion()
{
if(!stristr($_SERVER['HTTP_USER_AGENT'], 'MSIE')) {
return 0;
}
preg_match('/MSIE\s([\d.]+)/i', $_SERVER['HTTP_USER_AGENT'], $ver);
$ver = floor($ver[1]);
return (int) $ver;
}
/**
* ブラウザのタイプを取得する
*
* @return string
* @link http://developer.wordpress.org/reference/functions/wp_is_mobile/
*/
public static function getBrowserType()
{
$type = 'legacy';
if(isset($_SERVER['HTTP_USER_AGENT'])) {
if(self::getIEVersion() >= 10) {
$type = 'modern';
} else if(strpos($_SERVER['HTTP_USER_AGENT'], 'Mobile') !== false
|| strpos($_SERVER['HTTP_USER_AGENT'], 'Android') !== false
|| strpos($_SERVER['HTTP_USER_AGENT'], 'Silk/') !== false
|| strpos($_SERVER['HTTP_USER_AGENT'], 'Kindle') !== false
|| strpos($_SERVER['HTTP_USER_AGENT'], 'BlackBerry') !== false
|| strpos($_SERVER['HTTP_USER_AGENT'], 'Opera Mini') !== false
|| strpos($_SERVER['HTTP_USER_AGENT'], 'Opera Mobi') !== false)) {
$type = 'mobile';
} else if(strpos($_SERVER['HTTP_USER_AGENT'], 'bot') !== false
|| strpos($_SERVER['HTTP_USER_AGENT'], 'spider') !== false
|| strpos($_SERVER['HTTP_USER_AGENT'], 'archiver') !== false
|| strpos($_SERVER['HTTP_USER_AGENT'], 'Google') !== false
|| strpos($_SERVER['HTTP_USER_AGENT'], 'Yahoo') !== false {
$type = 'robot';
} else if(isset($_SERVER['HTTP_ACCEPT'])) {
if(strpos($_SERVER['HTTP_ACCEPT'], 'application/xml') !== false
|| strpos($_SERVER['HTTP_ACCEPT']), 'application/xhtml+xml' !== false) {
$type = 'modern';
}
}
}
return (string) $type;
}
/**
* モダンブラウザかどうかの判定
*
* @return bool モダンブラウザならtrue、そうでなければfalse
*/
public static function isModernBrowser()
{
return (bool) (self::getBrowserType() === 'modern');
}
/**
* レガシーブラウザかどうかの判定
*
* @return bool レガシーブラウザならtrue、そうでなければfalse
*/
public static function isLegacyBrowser()
{
return (bool) (self::getBrowserType() === 'legacy');
}
/**
* スマートフォンやタブレットなどのモバイル端末かどうかを判定する
*
* @return bool モバイル端末ならばtrue、そうでなければfalse
*/
public static function isMobile()
{
return (bool) (self::getBrowserType() === 'mobile');
}
/**
* ボットかどうかを判定する
*
* @return bool ボットならばtrue、そうでなければfalse
*/
public static function isBot()
{
return (bool) (self::getBrowserType() === 'robot');
}
}
?>
@lnkusuin
Copy link

18行目の
if(stristr($_SERVER['HTTP_USER_AGENT'], "MSIE"))

if(!stristr($_SERVER['HTTP_USER_AGENT'], "MSIE"))
ですか?

@hbsnow
Copy link
Author

hbsnow commented Jun 11, 2015

ありがとうございます、修正しました

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment