Вход Регистрация
Файл: sys/classes/browser.class.php
Строк: 362
<?php

/**
 * Информация о браузере
 */
abstract class browser {

    
/**
     * Возвращает версию IE или false
     * @return integer|false
     */
    
static function getIEver() {
        
$info self::getBrowserInfo();
        return 
$info['ie'];
    }

    
/**
     * Возвращает тип браузера
     * @return string wap|pda|itouch|web
     */
    
static function getType() {
        
$info self::getBrowserInfo();
        return 
$info['type'];
    }

    
/**
     * Возвращает название браузера и его мажорную версию
     * @return string
     */
    
static function getName() {
        
$info self::getBrowserInfo();
        return 
$info['name'];
    }

    
/**
     * Возвращает информацию о IP в формате IP_LONG
     * @staticvar boolean|string $ipLong
     * @return string
     */
    
static function getIpLong() {
        static 
$ipLong false;
        if (
$ipLong === false)
            
$ipLong sprintf("%u"ip2long($_SERVER['REMOTE_ADDR']));
        return 
$ipLong;
    }

    
/**
     * Возвращает информацию о браузере
     * @staticvar boolean|array $info
     * @return array
     */
    
static function getBrowserInfo() {
        static 
$info false;
        if (
$info === false)
            
$info self::_getBrowserinfo();
        return 
$info;
    }

    static protected function 
_getBrowserinfo() {
        
$user_agent = @$_SERVER['HTTP_USER_AGENT'];
        
$info = array(
            
'name' => 'Нет данных',
            
'type' => 'wap',
            
'ie' => false
        
);

        
// определение названия браузера
        
if (preg_match('#^([a-z0-9-_ ]+)/([0-9]+.[0-9]+)#i'$user_agent$b)) {
            
$info['name'] = $b[1] . (!empty($b[2]) ? ' ' $b[2] : '');
            
$info['type'] = 'pda';
        }

        if (
preg_match('#MSIE ([0-9]+)#ui'$user_agent$bv)) {
            
$info['name'] = 'Microsoft Internet Explorer';
            
$info['type'] = 'web';
            
$info['ie'] = $bv[1];
        }

        if (
preg_match('#America Online Browser#i'$user_agent)) {
            
$info['name'] = 'AOL Explorer';
            
$info['type'] = 'web';
        }

        if (
preg_match('#(Avant|Advanced) Browser#i'$user_agent)) {
            
$info['name'] = 'Avant Browser';
            
$info['type'] = 'web';
        }

        if (
preg_match('#Camino/([0-9]+.[0-9]+)#i'$user_agent$v)) {
            
$info['name'] = 'Camino ' $v[1];
            
$info['type'] = 'web';
        }

        if (
preg_match('#ELinks#i'$user_agent)) {
            
$info['name'] = 'ELinks';
            
$info['type'] = 'web';
        }

        if (
preg_match('#Epiphany#i'$user_agent)) {
            
$info['name'] = 'Epiphany';
            
$info['type'] = 'web';
        }

        if (
preg_match('#Flock#i'$user_agent)) {
            
$info['name'] = 'Flock';
            
$info['type'] = 'web';
        }

        if (
preg_match('#IceWeasel#i'$user_agent)) {
            
$info['name'] = 'GNU IceWeasel';
            
$info['type'] = 'web';
        }

        if (
preg_match('#IceCat#i'$user_agent)) {
            
$info['name'] = 'GNU IceCat';
            
$info['type'] = 'web';
        }

        if (
preg_match('#Microsoft Pocket Internet Explorer#i'$user_agent)) {
            
$info['name'] = 'Internet Explorer Mobile';
            
$info['type'] = 'pda';
        }

        if (
preg_match('#MSPIE#i'$user_agent)) {
            
$info['name'] = 'Internet Explorer Mobile';
            
$info['type'] = 'pda';
        }

        if (
preg_match('#Windows.+Smartphone#i'$user_agent)) {
            
$info['name'] = 'Internet Explorer Mobile';
            
$info['type'] = 'pda';
        }

        if (
preg_match('#Konqueror#i'$user_agent)) {
            
$info['name'] = 'Konqueror';
            
$info['type'] = 'web';
        }

        if (
preg_match('#Links#i'$user_agent)) {
            
$info['name'] = 'Links';
            
$info['type'] = 'web';
        }

        if (
preg_match('#Lynx#i'$user_agent)) {
            
$info['name'] = 'Lynx';
            
$info['type'] = 'web';
        }

        if (
preg_match('#Minimo#i'$user_agent)) {
            
$info['name'] = 'Minimo';
            
$info['type'] = 'web';
        }

        if (
preg_match('#(Firebird|Phoenix|Firefox)/([0-9]+.[0-9]+)#i'$user_agent$v)) {
            
$info['name'] = 'Mozilla Firefox ' $v[2];
            
$info['type'] = 'web';
        }

        if (
preg_match('#NetPositive#i'$user_agent)) {
            
$info['name'] = 'NetPositive';
            
$info['type'] = 'web';
        }

        if (
preg_match('#Opera/([0-9]+.[0-9]+)#i'$user_agent$v)) {
            
$ver self::_browser_version($user_agent);
            
$info['name'] = 'Opera ' . ($ver $ver $v[1]);
            
$info['type'] = 'web';
        }

        if (
preg_match('#Opera Mini/([0-9]+.[0-9]+)#i'$user_agent$v)) {
            
$info['name'] = 'Opera Mini ' $v[1];
            
$info['type'] = 'wap';
        }

        if (
preg_match('#Opera Mobi#i'$user_agent)) {
            
$ver self::_browser_version($user_agent);
            if (
$tel self::_phone_model($user_agent))
                
$info['name'] = 'Opera Mobile' . ($ver ' ' $ver '') . ' (' $tel[0] . ')';
            else
                
$info['name'] = 'Opera Mobile' . ($ver ' ' $ver '');
            
$info['type'] = 'pda';
        }

        if (
preg_match('#(SymbOS|Symbian).+Opera ([0-9]+.[0-9]+)#i'$user_agent$v)) {
            if (
$tel self::_phone_model($user_agent))
                
$info['name'] = 'Opera Mobile ' $v[2] . ' (' $tel[0] . ')';
            else
                
$info['name'] = 'Opera Mobile ' $v[2] . ' (Symbian)';
            
$info['type'] = 'pda';
        }

        if (
preg_match('#Windows CE.+Opera ([0-9]+.[0-9]+)#i'$user_agent$v)) {
            if (
$tel self::_phone_model($user_agent))
                
$info['name'] = 'Opera Mobile ' $v[1] . ' (' $tel[0] . ')';
            else
                
$info['name'] = 'Opera Mobile ' $v[1] . ' (Win)';
            
$info['type'] = 'pda';
        }

        if (
preg_match('#PlayStation Portable#i'$user_agent)) {
            
$info['name'] = 'PlayStation Portable';
            
$info['type'] = 'web';
        }

        if (
preg_match('#Safari#i'$user_agent)) {
            
$info['name'] = 'Safari';
            
$info['type'] = 'web';
        }

        if (
preg_match('#SeaMonkey#i'$user_agent)) {
            
$info['name'] = 'SeaMonkey';
            
$info['type'] = 'web';
        }

        if (
preg_match('#Shiira#i'$user_agent)) {
            
$info['name'] = 'Shiira';
            
$info['type'] = 'web';
        }

        if (
preg_match('#w3m#i'$user_agent)) {
            
$info['name'] = 'w3m';
            
$info['type'] = 'web';
        }

        if (
preg_match('#Chrome/([0-9]+.[0-9]+)#i'$user_agent$v)) {
            
$info['name'] = 'Google Chrome ' $v[1];
            
$info['type'] = 'web';
        }

        if (
preg_match('#SONY/COM#i'$user_agent)) {
            
$info['name'] = 'Sony mylo';
            
$info['type'] = 'pda';
        }

        if (
preg_match('#Nitro#i'$user_agent)) {
            
$info['name'] = 'Nintendo DS';
            
$info['type'] = 'pda';
        }

        if (
preg_match('#^Openwave#i'$user_agent)) {
            
$info['name'] = 'Openwave';
            
$info['type'] = 'pda';
        }

        if (
preg_match('#UCWEB#i'$user_agent)) {
            
$info['name'] = 'UCWEB';
            
$info['type'] = 'wap';
        }

        if (
preg_match('#BOLT/([0-9]+.[0-9]+)#i'$user_agent$m)) {
            
$info['name'] = 'BOLT ' $m[1];
            
$info['type'] = 'wap';
        }
        if (
$tel self::_phone_model($user_agent)) {
            
// определение модели телефона
            
$info['name'] = $tel[0];
            
$info['type'] = $tel[1];
        }

        if (isset(
$_SERVER['HTTP_X_OPERAMINI_PHONE_UA']) && preg_match('#Opera Mini/([0-9]+.[0-9]+)#i'$user_agent$v)) {
            
$user_agent_opera $_SERVER['HTTP_X_OPERAMINI_PHONE_UA'];
            if (
$tel self::_phone_model($user_agent_opera)) {
                
$info['name'] = 'Opera Mini ' $v[1] . ' (' $tel[0] . ')';
                
$info['type'] = version_compare($v[1], 4'>=') ? 'pda' $tel[1];
            }
        }

        if (
preg_match('#iPhone#i'$user_agent)) {
            
$info['name'] = 'iPhone';
            
$info['type'] = preg_match('#Opera Mini#i'$user_agent) ? 'pda' 'itouch';
        }

        if (
preg_match('#iPod#i'$user_agent)) {
            
$info['name'] = 'iPod';
            
$info['type'] = preg_match('#Opera Mini#i'$user_agent) ? 'pda' 'itouch';
        }

        if (
preg_match('#iPad#i'$user_agent)) {
            
$info['name'] = 'iPad';
            
$info['type'] = preg_match('#Opera Mini#i'$user_agent) ? 'pda' 'itouch';
        }
        if (
preg_match('#Bada#i'$user_agent)) {
            
// $info['name'] = 'Samsung Bada';
            
$info['type'] = preg_match('#Opera Mini#i'$user_agent) ? 'pda' 'itouch';
        }

        if (
preg_match('#Android#i'$user_agent)) {
            if (
preg_match('#Opera Mini#i'$user_agent)) {
                
$info['name'] = 'Opera Mini (Android)';
                
$info['type'] = 'pda';
            } else {
                
// $info['name'] = 'Android';
                
$info['type'] = 'itouch';
            }
        }

        if (
preg_match('#Windows Phone#i'$user_agent)) {

            if (
preg_match('#Opera Mini#i'$user_agent)) {
                
$info['name'] = 'Opera Mini (Windows Phone)';
                
$info['type'] = 'pda';
            } else {

                
// $info['name'] = 'Windows Phone 7';
                
$info['type'] = 'itouch';
            }
        }

        return 
$info;
    }

    static protected function 
_browser_version($user_agent) {
        
// определение версии браузера
        
if (preg_match('#Version/([0-9]+(.[0-9]+)?)#i'$user_agent$v))
            return 
$v[1];
    }

    static protected function 
_phone_model($ua) {
        
// определение модели устройства
        
if (preg_match('#SonyEricsson([0-9a-z]+)#i'$ua$b)) {
            return array(
'SonyEricsson ' $b[1], 'wap');
        }

        if (
preg_match('#Nokia([0-9a-z]+)#i'$ua$b)) {
            return array(
'Nokia ' $b[1], 'wap');
        }

        if (
preg_match('#LG-([0-9a-z]+)#i'$ua$b)) {
            return array(
'LG ' $b[1], 'wap');
        }

        if (
preg_match('#FLY( |-)([0-9a-z]+)#i'$ua$b)) {
            return array(
'FLY ' $b[2], 'wap');
        }

        if (
preg_match('#MOT-([0-9a-z]+)#i'$ua$b)) {
            return array(
'Motorola ' $b[1], 'wap');
        }

        if (
preg_match('#SAMSUNG(-SGH|-GT)?-([0-9a-z]+)#i'$ua$b)) {
            return array(
'Samsung ' $b[2], 'wap');
        }

        if (
preg_match('#SEC-SGH([0-9a-z]+)#i'$ua$b)) {
            return array(
'Samsung ' $b[1], 'wap');
        }

        if (
preg_match('#SIE-([0-9a-z]+)#i'$ua$b)) {
            return array(
'Siemens ' $b[1], 'wap');
        }

        return 
false;
    }

}
Онлайн: 0
Реклама