Вход Регистрация
Файл: modules/lib/useragent_detect_os.php
Строк: 658
<?php
// Detect Operating System

class useragent_detect_os
{
    private static 
$_windows_version = array("10.0" => array("10""6"), "6.4" => array("10""6"), // Windows 10 before 10240
        
"6.3" => array("8.1""5"), "6.2" => array("8""5"), "6.1" => array("7""4"), "6.0" => array("Vista""3"), "5.2" => array("Server 2003""2"), "5.1" => array("XP""2"), "5.01" => array("2000 Service Pack 1""1"), "5.0" => array("2000""1"), "4.0" => array("NT 4.0""1"), "3.51" => array("NT 3.11""1"));
    
    public static function 
analyze($useragent)
    {
        
        
$result = array();
        
        
// Check if is AMD64
        
$x64 false;
        if (
preg_match('/x86_64|Win64; x64|WOW64|IRIX64/i'$useragent)) {
            
$x64 true;
        }
        
        
// Check Linux
        
if (preg_match('/Windows|Win(NT|32|95|98|16)|ZuneWP7|WPDesktop/i'$useragent)) {
            
$result self::analyzeWindows($useragent);
        } elseif (
preg_match('/Linux/i'$useragent) && !preg_match('/Android|ADR|Tizen/'$useragent)) {
            
$result self::analyzeLinux($useragent);
        } else {
            
$result self::analyzeOther($useragent);
        }
        
        
$result['x64']   = $x64;
        
$result['title'] = $result['name'] . ($result['version'] == "" '' ' ' $result['version']) . ($x64 ' x64' '');
        
$result['type']  = 'os';
        
$result['dir']   = 'os';
        
        return 
$result;
    }
    
    private static function 
_returnWindows(&$return$index)
    {
        
$return['image_url'] = 'win-' self::$_windows_version[$index][1];
        
$return['version']   = self::$_windows_version[$index][0];
    }
    
    public static function 
analyzeWindows($useragent)
    {
        
$link      "http://www.microsoft.com/windows/";
        
$name      'Windows';
        
$version   '';
        
$image_url 'win-2';
        
$return    = array(
            
"image_url" => "",
            
"version" => ""
        
);
        
        if (
preg_match('/Windows Phone|WPDesktop|ZuneWP7|WP7/i'$useragent)) {
            
$link "https://www.microsoft.com/windows/phones";
            
$name .= ' Phone';
            
$image_url "windowsphone";
            if (
preg_match('/Windows Phone (OS )?([0-9.]+)/i'$useragent$regmatch)) {
                
$version    $regmatch[2];
                
$intVersion = (int) $version;
                if (
$intVersion == 10) {
                    
$name      "Windows";
                    
$version   "10 Mobile";
                    
$image_url "win-6";
                } elseif (
$intVersion == 7) {
                    
$image_url "wp7";
                }
            }
        } elseif (
preg_match('/Windows NT (d+.d+)/i'$useragent$regmatch)) {
            if (isset(
self::$_windows_version[$regmatch[1]])) {
                
self::_returnWindows($return$regmatch[1]);
            }
        } elseif (
preg_match('/Windows 2000/i'$useragent)) {
            
self::_returnWindows($return"5.0");
        } elseif (
preg_match('/Windows XP/i'$useragent)) {
            
self::_returnWindows($return"5.1");
        } elseif (
preg_match('/Win(dows )?NT ?4.0|WinNT4.0/i'$useragent)) {
            
self::_returnWindows($return"4.0");
        } elseif (
preg_match('/Win(dows )?NT ?3.51|WinNT3.51/i'$useragent)) {
            
self::_returnWindows($return"3.51");
        } elseif (
preg_match('/Win(dows )?3.11|Win16/i'$useragent)) {
            
$version   "3.11";
            
$image_url "win-1";
        } elseif (
preg_match('/Windows 3.1/i'$useragent)) {
            
$version   "3.1";
            
$image_url "win-1";
        } elseif (
preg_match('/Win 9x 4.90|Windows ME/i'$useragent)) {
            
$version   "Me";
            
$image_url "win-1";
        } elseif (
preg_match('/Win98/i'$useragent)) {
            
$version   "98 SE";
            
$image_url "win-1";
        } elseif (
preg_match('/Windows (98|4.10)/i'$useragent)) {
            
$version   "98";
            
$image_url "win-1";
        } elseif (
preg_match('/Windows 95/i'$useragent) || preg_match('/Win95/i'$useragent)) {
            
$version   "95";
            
$image_url "win-1";
        } elseif (
preg_match('/Windows CE|Windows .+Mobile/i'$useragent)) {
            
$version   "CE";
            
$image_url "win-2";
            
// @codeCoverageIgnoreStart
        
} elseif (preg_match('/WM5/i'$useragent)) {
            
$name .= " Mobile";
            
$version   "5";
            
$image_url "win-phone";
        } elseif (
preg_match('/WindowsMobile/i'$useragent)) {
            
$name .= " Mobile";
            
$image_url "win-phone";
        }
        
// @codeCoverageIgnoreEnd
        
        
if ($return['image_url'] !== "") {
            
$image_url $return['image_url'];
        }
        if (
$return['version'] !== "") {
            
$version $return['version'];
        }
        
        return array(
            
'link' => $link,
            
'name' => $name,
            
'version' => $version,
            
'code' => $image_url
        
);
    }
    
    public static function 
analyzeLinux($useragent)
    {
        
$link      '';
        
$name      '';
        
$image_url '';
        
$version   '';
        
        if (
preg_match('/[^A-Za-z]Arch/i'$useragent)) {
            
$link      "http://www.archlinux.org/";
            
$name      "Arch Linux";
            
$image_url "archlinux";
        } elseif (
preg_match('/CentOS/i'$useragent)) {
            
$link "http://www.centos.org/";
            
$name "CentOS";
            
            if (
preg_match('/.el([.0-9a-zA-Z]+).centos/i'$useragent$regmatch)) {
                
$version $regmatch[1];
            }
            
            
$image_url "centos";
            
// @codeCoverageIgnoreStart
        
} elseif (preg_match('/Chakra/i'$useragent)) {
            
$link      "http://www.chakra-linux.org/";
            
$name      "Chakra Linux";
            
$image_url "chakra";
            
// @codeCoverageIgnoreEnd
            // @codeCoverageIgnoreStart
        
} elseif (preg_match('/Crunchbang/i'$useragent)) {
            
$link      "http://www.crunchbanglinux.org/";
            
$name      "Crunchbang";
            
$image_url "crunchbang";
            
// @codeCoverageIgnoreEnd
        
} elseif (preg_match('/Debian/i'$useragent)) {
            
$link      "http://www.debian.org/";
            
$name      "Debian GNU/Linux";
            
$image_url "debian";
            
// @codeCoverageIgnoreStart
        
} elseif (preg_match('/Edubuntu/i'$useragent)) {
            
$link "http://www.edubuntu.org/";
            
$name "Edubuntu";
            
            if (
preg_match('/Edubuntu[/| ]([.0-9a-zA-Z]+)/i'$useragent$regmatch)) {
                
$version $regmatch[1];
                
                if (
$regmatch[1] < 10) {
                    
$image_url "edubuntu-1";
                } else {
                    
$image_url "edubuntu-2";
                }
                
            }
            
            if (
strlen($version) > 1) {
                
$name .= $version;
            }
            
// @codeCoverageIgnoreEnd
        
} elseif (preg_match('/Fedora/i'$useragent)) {
            
$link "http://www.fedoraproject.org/";
            
$name "Fedora";
            
            if (
preg_match('/.fc([.0-9a-zA-Z]+)/i'$useragent$regmatch)) {
                
$version $regmatch[1];
                
            }
            
            
$image_url "fedora";
        } elseif (
preg_match('/Foresight Linux/i'$useragent)) {
            
$link "http://www.foresightlinux.org/";
            
$name "Foresight Linux";
            
            if (
preg_match('/Foresight Linux/([.0-9a-zA-Z]+)/i'$useragent$regmatch)) {
                
$version $regmatch[1];
                
            }
            
            
$image_url "foresight";
        } elseif (
preg_match('/Gentoo/i'$useragent)) {
            
$link      "http://www.gentoo.org/";
            
$name      "Gentoo";
            
$image_url "gentoo";
            
        } elseif (
preg_match('/Jolla/i'$useragent)) {
            
$link      "https://jolla.com/";
            
$name      "Jolla";
            
$image_url "jolla";
        } elseif (
preg_match('/Kanotix/i'$useragent)) {
            
$link      "http://www.kanotix.com/";
            
$name      "Kanotix";
            
$image_url "kanotix";
            
// @codeCoverageIgnoreStart
        
} elseif (preg_match('/Knoppix/i'$useragent)) {
            
$link      "http://www.knoppix.net/";
            
$name      "Knoppix";
            
$image_url "knoppix";
            
// @codeCoverageIgnoreEnd
            // @codeCoverageIgnoreStart
        
} elseif (preg_match('/Kubuntu/i'$useragent)) {
            
$link "http://www.kubuntu.org/";
            
$name "Kubuntu";
            
            if (
preg_match('/Kubuntu[/| ]([.0-9]+)/i'$useragent$regmatch)) {
                
$version $regmatch[1];
                
                if (
$regmatch[1] < 10) {
                    
$image_url "kubuntu-1";
                } else {
                    
$image_url "kubuntu-2";
                }
            } else {
                
$image_url "kubuntu-2";
            }
            
            
// @codeCoverageIgnoreEnd
        
} elseif (preg_match('/LindowsOS/i'$useragent)) {
            
$link      "http://en.wikipedia.org/wiki/Lsongs";
            
$name      "LindowsOS";
            
$image_url "lindowsos";
            
        } elseif (
preg_match('/Linspire/i'$useragent)) {
            
$link      "http://www.linspire.com/";
            
$name      "Linspire";
            
$image_url "lindowsos";
            
        } elseif (
preg_match('/Linux Mint/i'$useragent)) {
            
$link "http://www.linuxmint.com/";
            
$name "Linux Mint";
            
            if (
preg_match('/Linux Mint/([.0-9a-zA-Z]+)/i'$useragent$regmatch)) {
                
$version $regmatch[1];
                
            }
            
            
$image_url "linuxmint";
            
// @codeCoverageIgnoreStart
            
        
} elseif (preg_match('/Lubuntu/i'$useragent)) {
            
$link "http://www.lubuntu.net/";
            
$name "Lubuntu";
            
            if (
preg_match('/Lubuntu[/| ]([.0-9a-zA-Z]+)/i'$useragent$regmatch)) {
                
$version $regmatch[1];
                
                if (
$regmatch[1] < 10) {
                    
$image_url "lubuntu-1";
                } else {
                    
$image_url "lubuntu-2";
                }
            }
            
            if (
strlen($version) > 1) {
                
$name .= $version;
            }
            
// @codeCoverageIgnoreEnd
            
            // @codeCoverageIgnoreStart
            
        
} elseif (preg_match('/Mageia/i'$useragent)) {
            
$link      "http://www.mageia.org/";
            
$name      "Mageia";
            
$image_url "mageia";
            
// @codeCoverageIgnoreEnd
        
} elseif (preg_match('/Mandriva/i'$useragent)) {
            
$link "http://www.mandriva.com/";
            
$name "Mandriva";
            
// @codeCoverageIgnoreStart
            
            
if (preg_match('/mdv([.0-9a-zA-Z]+)/i'$useragent$regmatch)) {
                
$version $regmatch[1];
                
            }
            
// @codeCoverageIgnoreEnd
            
            
$image_url "mandriva";
            
        } elseif (
preg_match('/moonOS/i'$useragent)) {
            
$link "http://www.moonos.org/";
            
$name "moonOS";
            
            if (
preg_match('/moonOS/([.0-9a-zA-Z]+)/i'$useragent$regmatch)) {
                
$version $regmatch[1];
                
            }
            
            
$image_url "moonos";
        } elseif (
preg_match('/Nova/i'$useragent)) {
            
$link "http://www.nova.cu";
            
$name "Nova";
            
            if (
preg_match('/Nova[/| ]([.0-9a-zA-Z]+)/i'$useragent$regmatch)) {
                
$version $regmatch[1];
                
            }
            
            
$image_url "nova";
            
// @codeCoverageIgnoreStart
            
        
} elseif (preg_match('/Oracle/i'$useragent)) {
            
$link "http://www.oracle.com/us/technologies/linux/";
            
$name "Oracle";
            
            if (
preg_match('/.el([._0-9a-zA-Z]+)/i'$useragent$regmatch)) {
                
$name .= " Enterprise Linux";
                
$version str_replace("_""."$regmatch[1]);
            } else {
                
$name .= " Linux";
            }
            
$image_url "oracle";
            
// @codeCoverageIgnoreEnd
            
        
} elseif (preg_match('/Pardus/i'$useragent)) {
            
$link      "http://www.pardus.org.tr/en/";
            
$name      "Pardus";
            
$image_url "pardus";
            
        } elseif (
preg_match('/Red Hat/i'$useragent) || preg_match('/RedHat/i'$useragent)) {
            
$link "http://www.redhat.com/";
            
$name "Red Hat";
            
            if (
preg_match('/.el([._0-9a-zA-Z]+)/i'$useragent$regmatch)) {
                
$name .= " Enterprise Linux";
                
$version str_replace("_""."$regmatch[1]);
            }
            
            
$image_url "red-hat";
            
        } elseif (
preg_match('/Slackware/i'$useragent)) {
            
$link      "http://www.slackware.com/";
            
$name      "Slackware";
            
$image_url "slackware";
        } elseif (
preg_match('/Suse/i'$useragent)) {
            
$link      "http://www.opensuse.org/";
            
$name      "openSUSE";
            
$image_url "suse";
            
// @codeCoverageIgnoreStart
        
} elseif (preg_match('/Xubuntu/i'$useragent)) {
            
$link "http://www.xubuntu.org/";
            
$name "Xubuntu";
            
            if (
preg_match('/Xubuntu[/| ]([.0-9a-zA-Z]+)/i'$useragent$regmatch)) {
                
$version $regmatch[1];
                
                if (
$regmatch[1] < 10) {
                    
$image_url "xubuntu-1";
                } else {
                    
$image_url "xubuntu-2";
                }
                
            }
            
            
// @codeCoverageIgnoreEnd
        
} elseif (preg_match('/Zenwalk/i'$useragent)) {
            
$link      "http://www.zenwalk.org/";
            
$name      "Zenwalk GNU Linux";
            
$image_url "zenwalk";
        }
        
// Pulled out of order to help ensure better detection for above platforms
            
elseif (preg_match('/Ubuntu/i'$useragent)) {
            
$link "http://www.ubuntu.com/";
            
$name "Ubuntu";
            
            if (
preg_match('/Ubuntu[/| ]([.0-9]+[.0-9a-zA-Z]+)/i'$useragent$regmatch)) {
                
$version $regmatch[1];
                if (
$regmatch[1] < 10) {
                    
$image_url "ubuntu-1";
                }
            }
            
            if (
$image_url == '') {
                
$image_url "ubuntu-2";
            }
            
        } else {
            
$link      "http://www.linux.org/";
            
$name      "GNU/Linux";
            
$image_url "linux";
        }
        
        return array(
            
'link' => $link,
            
'name' => $name,
            
'version' => $version,
            
'code' => $image_url
        
);
    }
    
    public static function 
analyzeOther($useragent)
    {
        
$link      '';
        
$name      '';
        
$image_url '';
        
$version   '';
        
        
// Opera's Useragent does not contains 'Linux'
        
if (preg_match('/Android|ADR /i'$useragent)) {
            
$link      "http://www.android.com/";
            
$name      "Android";
            
$image_url "android";
            
            if (
preg_match('/(Android|Adr)[ |/]([.0-9]+)/i'$useragent$regmatch)) {
                
$version $regmatch[2];
            }
        } elseif (
preg_match('/CPU (iPhone )?OS ([._0-9a-zA-Z]+)/i'$useragent$regmatch)) {
            
$link      "http://www.apple.com/";
            
$name      "iOS";
            
$image_url "mac-3";
            
$version   str_replace("_""."$regmatch[2]);
        } elseif (
preg_match('/AmigaOS/i'$useragent)) {
            
$link "http://en.wikipedia.org/wiki/AmigaOS";
            
$name "AmigaOS";
            
            if (
preg_match('/AmigaOS ([.0-9a-zA-Z]+)/i'$useragent$regmatch)) {
                
$version $regmatch[1];
            }
            
            
$image_url "amigaos";
        } elseif (
preg_match('/BB10/i'$useragent)) {
            
$link      "http://www.blackberry.com/";
            
$name      "BlackBerry OS";
            
$version   "10";
            
$image_url "blackberry";
            
        } elseif (
preg_match('/BeOS/i'$useragent)) {
            
$link      "http://en.wikipedia.org/wiki/BeOS";
            
$name      "BeOS";
            
$image_url "beos";
            
        } elseif (
preg_match('/b(?!Mi)CrOS(?!oft)/i'$useragent)) {
            
$link      "http://en.wikipedia.org/wiki/Google_Chrome_OS";
            
$name      "Google Chrome OS";
            
$image_url "chromeos";
        } elseif (
preg_match('/DragonFly/i'$useragent)) {
            
$link      "http://www.dragonflybsd.org/";
            
$name      "DragonFly BSD";
            
$image_url "dragonflybsd";
            
        } elseif (
preg_match('/FreeBSD/i'$useragent)) {
            
$link      "http://www.freebsd.org/";
            
$name      "FreeBSD";
            
$image_url "freebsd";
            
        } elseif (
preg_match('/Inferno/i'$useragent)) {
            
$link      "http://www.vitanuova.com/inferno/";
            
$name      "Inferno";
            
$image_url "inferno";
            
        } elseif (
preg_match('/IRIX/i'$useragent)) {
            
$link "http://www.sgi.com/partners/?/technology/irix/";
            
$name "IRIX";
            
            if (
preg_match('/IRIX(64)? ([.0-9a-zA-Z]+)/i'$useragent$regmatch)) {
                
                if (
$regmatch[2]) {
                    
$version $regmatch[2];
                }
            }
            
            
$image_url "irix";
            
        } elseif (
preg_match('/Mac/i'$useragent) || preg_match('/Darwin/i'$useragent)) {
            
$link "http://www.apple.com/macosx/";
            
            if (
preg_match('/(Mac OS ?X)/i'$useragent$regmatch)) {
                
$name substr($useragentstrpos(strtolower($useragent), strtolower($regmatch[1])));
                
$name substr($name0strpos($name")"));
                
                if (
strpos($name";")) {
                    
$name substr($name0strpos($name";"));
                }
                
                
$name         str_replace("_""."$name);
                
$name         str_replace("OSX""OS X"$name);
                
$macOSVersion strpos($name"OS X") + 4;
                
$version      trim(substr($name$macOSVersion));
                
$name         substr($name0$macOSVersion);
                
                if (
version_compare('10.12'$version) < 1) {
                    
$name 'macOS';
                }
                
                
$image_url $regmatch[1] == "Mac OSX" "mac-2" "mac-3";
            } elseif (
preg_match('/Darwin/i'$useragent)) {
                
$name      "Mac OS Darwin";
                
$image_url "mac-1";
            } else {
                
$name      "Macintosh";
                
$image_url "mac-1";
            }
        } elseif (
preg_match('/Meego/i'$useragent)) {
            
$link      "http://meego.com/";
            
$name      "Meego";
            
$image_url "meego";
            
        } elseif (
preg_match('/MorphOS/i'$useragent)) {
            
$link      "http://www.morphos-team.net/";
            
$name      "MorphOS";
            
$image_url "morphos";
            
        } elseif (
preg_match('/NetBSD/i'$useragent)) {
            
$link      "http://www.netbsd.org/";
            
$name      "NetBSD";
            
$image_url "netbsd";
            
        } elseif (
preg_match('/OpenBSD/i'$useragent)) {
            
$link      "http://www.openbsd.org/";
            
$name      "OpenBSD";
            
$image_url "openbsd";
        } elseif (
preg_match('/RISC OS/i'$useragent)) {
            
$link      "https://www.riscosopen.org/";
            
$name      "RISC OS";
            
$image_url "risc";
            
            if (
preg_match('/RISC OS ([.0-9a-zA-Z]+)/i'$useragent$regmatch)) {
                
$version $regmatch[1];
            }
            
        } elseif (
preg_match('/Solaris|SunOS/i'$useragent)) {
            
$link      "http://www.sun.com/software/solaris/";
            
$name      "Solaris";
            
$image_url "solaris";
            
        } elseif (
preg_match('/Symb(ian)?(OS)?/i'$useragent)) {
            
$link "http://www.symbianos.org/";
            
$name "SymbianOS";
            
            if (
preg_match('/Symb(ian)?(OS)?/([.0-9a-zA-Z]+)/i'$useragent$regmatch)) {
                
$version $regmatch[3];
            }
            
            
$image_url "symbian";
            
        } elseif (
preg_match('/Tizen/i'$useragent)) {
            
$link      "https://www.tizen.org/";
            
$name      "Tizen";
            
$image_url "tizen";
            
// @codeCoverageIgnoreStart
            
        
} elseif (preg_match('/Unix/i'$useragent)) {
            
$link      "http://www.unix.org/";
            
$name      "Unix";
            
$image_url "unix";
            
// @codeCoverageIgnoreStart
            
        
} elseif (preg_match('/webOS/i'$useragent)) {
            
$link      "http://en.wikipedia.org/wiki/WebOS";
            
$name      "Palm webOS";
            
$image_url "palm";
        } elseif (
preg_match('/J2ME/MIDP/i'$useragent)) {
            
$link      "http://java.sun.com/javame/";
            
$name      "J2ME/MIDP Device";
            
$image_url "java";
        } else {
            
$image_url "null";
        }
        
        return array(
            
'link' => $link,
            
'name' => $name,
            
'version' => $version,
            
'code' => $image_url
        
);
    }
}
Онлайн: 0
Реклама