Вход Регистрация
Файл: outs/mobileesp/mdetect.php
Строк: 1226
<?php

/* *******************************************
// Copyright 2010-2013, Anthony Hand
//
// File version 2013.10.27 (October 27, 2013)
//    Updates:
//    - Made minor update to the InitDeviceScan. Should check Tablet Tier first, then iPhone Tier, then Quick Mobile. 
//
// File version 2013.08.01 (August 1, 2013)
//    Updates:
//    - Updated DetectMobileQuick(). Moved the 'Exclude Tablets' logic to the top of the method to fix a logic bug.
//
// File version 2013.07.13 (July 13, 2013)
//    Updates:
//    - Added support for Tizen: variable and DetectTizen().
//    - Added support for Meego: variable and DetectMeego().
//    - Added support for Windows Phone 8: variable and DetectWindowsPhone8().
//    - Added a generic Windows Phone method: DetectWindowsPhone().
//    - Added support for BlackBerry 10 OS: variable and DetectBlackBerry10Phone().
//    - Added support for PlayStation Vita handheld: variable and DetectGamingHandheld().
//    - Updated DetectTierIphone(). Added Tizen; updated the Windows Phone, BB10, and PS Vita support. 
//    - Updated DetectWindowsMobile(). Uses generic DetectWindowsPhone() method rather than WP7.
//    - Updated DetectSmartphone(). Uses the IsTierIphone variable.
//    - Updated DetectSonyMylo() with more efficient code.
//    - Removed DetectGarminNuvifone() from DetectTierIphone(). How many are left in market in 2013? It is detected as a RichCSS Tier device.
//    - Removed the deviceXoom variable. It was unused.
//    - Added detection support for the Obigo mobile browser to DetectMobileQuick().
//
//
// LICENSE INFORMATION
// Licensed under the Apache License, Version 2.0 (the "License"); 
// you may not use this file except in compliance with the License. 
// You may obtain a copy of the License at 
//        http://www.apache.org/licenses/LICENSE-2.0 
// Unless required by applicable law or agreed to in writing, 
// software distributed under the License is distributed on an 
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 
// either express or implied. See the License for the specific 
// language governing permissions and limitations under the License. 
//
//
// ABOUT THIS PROJECT
//   Project Owner: Anthony Hand
//   Email: anthony.hand@gmail.com
//   Web Site: http://www.mobileesp.com
//   Source Files: http://code.google.com/p/mobileesp/
//   
//   Versions of this code are available for:
//      PHP, JavaScript, Java, ASP.NET (C#), and Ruby
//
// *******************************************
*/



//**************************
// The uagent_info class encapsulates information about
//   a browser's connection to your web site. 
//   You can use it to find out whether the browser asking for
//   your site's content is probably running on a mobile device.
//   The methods were written so you can be as granular as you want.
//   For example, enquiring whether it's as specific as an iPod Touch or
//   as general as a smartphone class device.
//   The object's methods return 1 for true, or 0 for false.
class uagent_info
{
   var 
$useragent "";
   var 
$httpaccept "";

   
//standardized values for true and false.
   
var $true 1;
   var 
$false 0;

   
//Let's store values for quickly accessing the same info multiple times. InitCompleted
   
var $initCompleted 0//Stores whether we're currently initializing the most popular functions.
   
var $isWebkit 0//Stores the result of DetectWebkit()
   
var $isMobilePhone 0//Stores the result of DetectMobileQuick()
   
var $isIphone 0//Stores the result of DetectIphone()
   
var $isAndroid 0//Stores the result of DetectAndroid()
   
var $isAndroidPhone 0//Stores the result of DetectAndroidPhone()
   
var $isTierTablet 0//Stores the result of DetectTierTablet()
   
var $isTierIphone 0//Stores the result of DetectTierIphone()
   
var $isTierRichCss 0//Stores the result of DetectTierRichCss()
   
var $isTierGenericMobile 0//Stores the result of DetectTierOtherPhones()

   //Initialize some initial smartphone string variables.
   
var $engineWebKit 'webkit';

   var 
$deviceIphone 'iphone';
   var 
$deviceIpod 'ipod';
   var 
$deviceIpad 'ipad';
   var 
$deviceMacPpc 'macintosh'//Used for disambiguation

   
var $deviceAndroid 'android';
   var 
$deviceGoogleTV 'googletv';
   var 
$deviceHtcFlyer 'htc_flyer'//HTC Flyer
   
   
var $deviceWinPhone7 'windows phone os 7'
   var 
$deviceWinPhone8 'windows phone 8'
   var 
$deviceWinMob 'windows ce';
   var 
$deviceWindows 'windows'
   var 
$deviceIeMob 'iemobile';
   var 
$devicePpc 'ppc'//Stands for PocketPC
   
var $enginePie 'wm5 pie'//An old Windows Mobile
   
   
var $deviceBB 'blackberry';   
   var 
$deviceBB10 'bb10'//For the new BB 10 OS
   
var $vndRIM 'vnd.rim'//Detectable when BB devices emulate IE or Firefox
   
var $deviceBBStorm 'blackberry95';  //Storm 1 and 2
   
var $deviceBBBold 'blackberry97'//Bold 97x0 (non-touch)
   
var $deviceBBBoldTouch 'blackberry 99'//Bold 99x0 (touchscreen)
   
var $deviceBBTour 'blackberry96'//Tour
   
var $deviceBBCurve 'blackberry89'//Curve2
   
var $deviceBBCurveTouch 'blackberry 938'//Curve Touch
   
var $deviceBBTorch 'blackberry 98'//Torch
   
var $deviceBBPlaybook 'playbook'//PlayBook tablet
   
   
var $deviceSymbian 'symbian';
   var 
$deviceS60 'series60';
   var 
$deviceS70 'series70';
   var 
$deviceS80 'series80';
   var 
$deviceS90 'series90';
   
   var 
$devicePalm 'palm';
   var 
$deviceWebOS 'webos'//For Palm's line of WebOS devices
   
var $deviceWebOShp 'hpwos'//For HP's line of WebOS devices
   
var $engineBlazer 'blazer'//Old Palm browser
   
var $engineXiino 'xiino'//Another old Palm
   
   
var $deviceNuvifone 'nuvifone'//Garmin Nuvifone
   
var $deviceBada 'bada'//Samsung's Bada OS
   
var $deviceTizen 'tizen'//Tizen OS
   
var $deviceMeego 'meego'//Meego OS

   
var $deviceKindle 'kindle'//Amazon Kindle, eInk one
   
var $engineSilk 'silk-accelerated'//Amazon's accelerated Silk browser for Kindle Fire
   
   //Initialize variables for mobile-specific content.
   
var $vndwap 'vnd.wap';
   var 
$wml 'wml';   
   
   
//Initialize variables for other random devices and mobile browsers.
   
var $deviceTablet 'tablet'//Generic term for slate and tablet devices
   
var $deviceBrew 'brew';
   var 
$deviceDanger 'danger';
   var 
$deviceHiptop 'hiptop';
   var 
$devicePlaystation 'playstation';
   var 
$devicePlaystationVita 'vita';
   var 
$deviceNintendoDs 'nitro';
   var 
$deviceNintendo 'nintendo';
   var 
$deviceWii 'wii';
   var 
$deviceXbox 'xbox';
   var 
$deviceArchos 'archos';
   
   var 
$engineOpera 'opera'//Popular browser
   
var $engineNetfront 'netfront'//Common embedded OS browser
   
var $engineUpBrowser 'up.browser'//common on some phones
   
var $engineOpenWeb 'openweb'//Transcoding by OpenWave server
   
var $deviceMidp 'midp'//a mobile Java technology
   
var $uplink 'up.link';
   var 
$engineTelecaQ 'teleca q'//a modern feature phone browser
   
var $engineObigo 'obigo'//W 10 is a modern feature phone browser
   
   
var $devicePda 'pda'//some devices report themselves as PDAs
   
var $mini 'mini';  //Some mobile browsers put 'mini' in their names.
   
var $mobile 'mobile'//Some mobile browsers put 'mobile' in their user agent strings.
   
var $mobi 'mobi'//Some mobile browsers put 'mobi' in their user agent strings.
   
   //Use Maemo, Tablet, and Linux to test for Nokia's Internet Tablets.
   
var $maemo 'maemo';
   var 
$linux 'linux';
   var 
$qtembedded 'qt embedded'//for Sony Mylo and others
   
var $mylocom2 'com2'//for Sony Mylo also
   
   //In some UserAgents, the only clue is the manufacturer.
   
var $manuSonyEricsson "sonyericsson";
   var 
$manuericsson "ericsson";
   var 
$manuSamsung1 "sec-sgh";
   var 
$manuSony "sony";
   var 
$manuHtc "htc";

   
//In some UserAgents, the only clue is the operator.
   
var $svcDocomo "docomo";
   var 
$svcKddi "kddi";
   var 
$svcVodafone "vodafone";

   
//Disambiguation strings.
   
var $disUpdate "update"//pda vs. update


   //**************************
   //The constructor. Allows the latest PHP (5.0+) to locate a constructor object and initialize the object.
   
function __construct()
   {
     
$this->uagent_info();
   }


   
//**************************
   //The object initializer. Initializes several default variables.
   
function uagent_info()
   { 
     
$this->useragent = isset($_SERVER['HTTP_USER_AGENT'])?strtolower($_SERVER['HTTP_USER_AGENT']):'';
     
$this->httpaccept = isset($_SERVER['HTTP_ACCEPT'])?strtolower($_SERVER['HTTP_ACCEPT']):'';
        
     
//Let's initialize some values to save cycles later.
     
$this->InitDeviceScan();
   }
   
   
//**************************
   // Initialize Key Stored Values.
   
function InitDeviceScan()
   {
        
//Save these properties to speed processing
        
global $isWebkit$isIphone$isAndroid$isAndroidPhone;
        
$this->isWebkit $this->DetectWebkit();
        
$this->isIphone $this->DetectIphone();
        
$this->isAndroid $this->DetectAndroid();
        
$this->isAndroidPhone $this->DetectAndroidPhone();
        
        
//These tiers are the most useful for web development
        
global $isMobilePhone$isTierTablet$isTierIphone;
        
$this->isTierTablet $this->DetectTierTablet(); //Do first
        
$this->isTierIphone $this->DetectTierIphone(); //Do second
        
$this->isMobilePhone $this->DetectMobileQuick(); //Do third
        
        //Optional: Comment these out if you NEVER use them.
        
global $isTierRichCss$isTierGenericMobile;
        
$this->isTierRichCss $this->DetectTierRichCss();
        
$this->isTierGenericMobile $this->DetectTierOtherPhones();
        
        
$this->initCompleted $this->true;
   }

   
//**************************
   //Returns the contents of the User Agent value, in lower case.
   
function Get_Uagent()
   { 
       return 
$this->useragent;
   }

   
//**************************
   //Returns the contents of the HTTP Accept value, in lower case.
   
function Get_HttpAccept()
   { 
       return 
$this->httpaccept;
   }
   

   
//**************************
   // Detects if the current device is an iPhone.
   
function DetectIphone()
   {
      if (
$this->initCompleted == $this->true ||
          
$this->isIphone == $this->true)
         return 
$this->isIphone;
      
      if (
stripos($this->useragent$this->deviceIphone) > -1)
      {
         
//The iPad and iPod Touch say they're an iPhone. So let's disambiguate.
         
if ($this->DetectIpad() == $this->true ||
             
$this->DetectIpod() == $this->true)
            return 
$this->false;
         
//Yay! It's an iPhone!
         
else
            return 
$this->true
      }
      else
         return 
$this->false
   }

   
//**************************
   // Detects if the current device is an iPod Touch.
   
function DetectIpod()
   {
      if (
stripos($this->useragent$this->deviceIpod) > -1)
         return 
$this->true
      else
         return 
$this->false
   }
   
   
//**************************
   // Detects if the current device is an iPad tablet.
   
function DetectIpad()
   {
      if (
stripos($this->useragent$this->deviceIpad) > -&&
          
$this->DetectWebkit() == $this->true)
         return 
$this->true
      else
         return 
$this->false
   }

   
//**************************
   // Detects if the current device is an iPhone or iPod Touch.
   
function DetectIphoneOrIpod()
   {
       
//We repeat the searches here because some iPods may report themselves as an iPhone, which would be okay.
      
if ($this->DetectIphone() == $this->true ||
             
$this->DetectIpod() == $this->true)
         return 
$this->true
      else
         return 
$this->false
   }

   
//**************************
   // Detects *any* iOS device: iPhone, iPod Touch, iPad.
   
function DetectIos()
   {
      if ((
$this->DetectIphoneOrIpod() == $this->true) ||
        (
$this->DetectIpad() == $this->true))
         return 
$this->true
      else
         return 
$this->false;
   }


   
//**************************
   // Detects *any* Android OS-based device: phone, tablet, and multi-media player.
   // Also detects Google TV.
   
function DetectAndroid()
   {
      if (
$this->initCompleted == $this->true ||
          
$this->isAndroid == $this->true)
         return 
$this->isAndroid;

      if ((
stripos($this->useragent$this->deviceAndroid) > -1)
          || (
$this->DetectGoogleTV() == $this->true))
         return 
$this->true
      
//Special check for the HTC Flyer 7" tablet
      
if ((stripos($this->useragent$this->deviceHtcFlyer) > -1))
         return 
$this->true
      else
         return 
$this->false
   }

   
//**************************
   // Detects if the current device is a (small-ish) Android OS-based device
   // used for calling and/or multi-media (like a Samsung Galaxy Player).
   // Google says these devices will have 'Android' AND 'mobile' in user agent.
   // Ignores tablets (Honeycomb and later).
   
function DetectAndroidPhone()
   {
      if (
$this->initCompleted == $this->true ||
          
$this->isAndroidPhone == $this->true)
         return 
$this->isAndroidPhone;

      if ((
$this->DetectAndroid() == $this->true) &&
        (
stripos($this->useragent$this->mobile) > -1))
         return 
$this->true;
      
      
//Special check for Android phones with Opera Mobile. They should report here.
      
if (($this->DetectOperaAndroidPhone() == $this->true))
         return 
$this->true
      
//Special check for the HTC Flyer 7" tablet. It should report here.
      
if ((stripos($this->useragent$this->deviceHtcFlyer) > -1))
         return 
$this->true;
      
      else
         return 
$this->false
   }

   
//**************************
   // Detects if the current device is a (self-reported) Android tablet.
   // Google says these devices will have 'Android' and NOT 'mobile' in their user agent.
   
function DetectAndroidTablet()
   {
      
//First, let's make sure we're on an Android device.
      
if ($this->DetectAndroid() == $this->false)
         return 
$this->false

      
//Special check for Opera Android Phones. They should NOT report here.
      
if ($this->DetectOperaMobile() == $this->true)
         return 
$this->false
      
//Special check for the HTC Flyer 7" tablet. It should NOT report here.
      
if ((stripos($this->useragent$this->deviceHtcFlyer) > -1))
         return 
$this->false
         
      
//Otherwise, if it's Android and does NOT have 'mobile' in it, Google says it's a tablet.
      
if (stripos($this->useragent$this->mobile) > -1)
         return 
$this->false;
      else
         return 
$this->true
   }

   
//**************************
   // Detects if the current device is an Android OS-based device and
   //   the browser is based on WebKit.
   
function DetectAndroidWebKit()
   {
      if ((
$this->DetectAndroid() == $this->true) &&
        (
$this->DetectWebkit() == $this->true))
         return 
$this->true
      else
         return 
$this->false
   }

   
//**************************
   // Detects if the current device is a GoogleTV.
   
function DetectGoogleTV()
   {
      if (
stripos($this->useragent$this->deviceGoogleTV) > -1)
         return 
$this->true
      else
         return 
$this->false
   }

   
//**************************
   // Detects if the current browser is based on WebKit.
   
function DetectWebkit()
   {
      if (
$this->initCompleted == $this->true ||
          
$this->isWebkit == $this->true)
         return 
$this->isWebkit;

      if (
stripos($this->useragent$this->engineWebKit) > -1)
         return 
$this->true
      else
         return 
$this->false
   }


   
//**************************
   // Detects if the current browser is EITHER a 
   // Windows Phone 7.x OR 8 device.
   
function DetectWindowsPhone()
   {
      if ((
$this->DetectWindowsPhone8() == $this->true)
            || (
$this->DetectWindowsPhone7() == $this->true))
         return 
$this->true
      else
         return 
$this->false
   }
   
   
//**************************
   // Detects a Windows Phone 7.x device (in mobile browsing mode).
   
function DetectWindowsPhone7()
   {
      if (
stripos($this->useragent$this->deviceWinPhone7) > -1)
         return 
$this->true
      else
         return 
$this->false
   }
   
   
//**************************
   // Detects a Windows Phone 8 device (in mobile browsing mode).
   
function DetectWindowsPhone8()
   {
      if (
stripos($this->useragent$this->deviceWinPhone8) > -1)
         return 
$this->true
      else
         return 
$this->false
   }

   
//**************************
   // Detects if the current browser is a Windows Mobile device.
   // Excludes Windows Phone 7 and later devices. 
   // Focuses on Windows Mobile 6.xx and earlier.
   
function DetectWindowsMobile()
   {
      if (
$this->DetectWindowsPhone() == $this->true)
         return 
$this->false;
      
      
//Most devices use 'Windows CE', but some report 'iemobile' 
      //  and some older ones report as 'PIE' for Pocket IE. 
      
if (stripos($this->useragent$this->deviceWinMob) > -||
          
stripos($this->useragent$this->deviceIeMob) > -||
          
stripos($this->useragent$this->enginePie) > -1)
         return 
$this->true
      
//Test for Windows Mobile PPC but not old Macintosh PowerPC.
      
if (stripos($this->useragent$this->devicePpc) > -1
          
&& !(stripos($this->useragent$this->deviceMacPpc) > 1))
         return 
$this->true
      
//Test for certain Windwos Mobile-based HTC devices.
      
if (stripos($this->useragent$this->manuHtc) > -&&
          
stripos($this->useragent$this->deviceWindows) > -1)
         return 
$this->true
      if (
$this->DetectWapWml() == $this->true &&
          
stripos($this->useragent$this->deviceWindows) > -1
         return 
$this->true
      else
         return 
$this->false
   }

   
//**************************
   // Detects if the current browser is any BlackBerry device.
   // Includes BB10 OS, but excludes the PlayBook.
   
function DetectBlackBerry()
   {
       if ((
stripos($this->useragent$this->deviceBB) > -1) ||
          (
stripos($this->httpaccept$this->vndRIM) > -1))
         return 
$this->true;
      if (
$this->DetectBlackBerry10Phone() == $this->true
         return 
$this->true;       
       else
         return 
$this->false
   }
   
   
//**************************
   // Detects if the current browser is a BlackBerry 10 OS phone.
   // Excludes tablets.
   
function DetectBlackBerry10Phone()
   {
       if ((
stripos($this->useragent$this->deviceBB10) > -1) &&
          (
stripos($this->useragent$this->mobile) > -1))
         return 
$this->true
       else
         return 
$this->false
   }
   
   
//**************************
   // Detects if the current browser is on a BlackBerry tablet device.
   //    Examples: PlayBook
   
function DetectBlackBerryTablet()
   {
      if ((
stripos($this->useragent$this->deviceBBPlaybook) > -1))
         return 
$this->true
      else
        return 
$this->false
   }

   
//**************************
   // Detects if the current browser is a BlackBerry phone device AND uses a
   //    WebKit-based browser. These are signatures for the new BlackBerry OS 6.
   //    Examples: Torch. Includes the Playbook.
   
function DetectBlackBerryWebKit()
   {
      if ((
$this->DetectBlackBerry() == $this->true) &&
        (
$this->DetectWebkit() == $this->true))
         return 
$this->true
      else
        return 
$this->false
   }

   
//**************************
   // Detects if the current browser is a BlackBerry Touch phone device with
   //    a large screen, such as the Storm, Torch, and Bold Touch. Excludes the Playbook.
   
function DetectBlackBerryTouch()
   {  
       if ((
stripos($this->useragent$this->deviceBBStorm) > -1) ||
        (
stripos($this->useragent$this->deviceBBTorch) > -1) ||
        (
stripos($this->useragent$this->deviceBBBoldTouch) > -1) ||
        (
stripos($this->useragent$this->deviceBBCurveTouch) > -1))
         return 
$this->true
       else
         return 
$this->false
   }
   
   
//**************************
   // Detects if the current browser is a BlackBerry OS 5 device AND
   //    has a more capable recent browser. Excludes the Playbook.
   //    Examples, Storm, Bold, Tour, Curve2
   //    Excludes the new BlackBerry OS 6 and 7 browser!!
   
function DetectBlackBerryHigh()
   {
      
//Disambiguate for BlackBerry OS 6 or 7 (WebKit) browser
      
if ($this->DetectBlackBerryWebKit() == $this->true)
         return 
$this->false
      if (
$this->DetectBlackBerry() == $this->true)
      {
          if ((
$this->DetectBlackBerryTouch() == $this->true) ||
            
stripos($this->useragent$this->deviceBBBold) > -||
            
stripos($this->useragent$this->deviceBBTour) > -||
            
stripos($this->useragent$this->deviceBBCurve) > -1)
          {
             return 
$this->true
          }
          else
            return 
$this->false
      }
      else
        return 
$this->false
   }

   
//**************************
   // Detects if the current browser is a BlackBerry device AND
   //    has an older, less capable browser. 
   //    Examples: Pearl, 8800, Curve1.
   
function DetectBlackBerryLow()
   {
      if (
$this->DetectBlackBerry() == $this->true)
      {
          
//Assume that if it's not in the High tier, then it's Low.
          
if (($this->DetectBlackBerryHigh() == $this->true) ||
            (
$this->DetectBlackBerryWebKit() == $this->true))
             return 
$this->false
          else
            return 
$this->true
      }
      else
        return 
$this->false
   }


   
//**************************
   // Detects if the current browser is the Nokia S60 Open Source Browser.
   
function DetectS60OssBrowser()
   {
      
//First, test for WebKit, then make sure it's either Symbian or S60.
      
if ($this->DetectWebkit() == $this->true)
      {
        if (
stripos($this->useragent$this->deviceSymbian) > -||
            
stripos($this->useragent$this->deviceS60) > -1)
        {
           return 
$this->true;
        }
        else
           return 
$this->false
      }
      else
         return 
$this->false
   }
   
   
//**************************
   // Detects if the current device is any Symbian OS-based device,
   //   including older S60, Series 70, Series 80, Series 90, and UIQ, 
   //   or other browsers running on these devices.
   
function DetectSymbianOS()
   {
       if (
stripos($this->useragent$this->deviceSymbian) > -|| 
           
stripos($this->useragent$this->deviceS60) > -||
           
stripos($this->useragent$this->deviceS70) > -|| 
           
stripos($this->useragent$this->deviceS80) > -||
           
stripos($this->useragent$this->deviceS90) > -1)
         return 
$this->true
      else
         return 
$this->false
   }


   
//**************************
   // Detects if the current browser is on a PalmOS device.
   
function DetectPalmOS()
   {
        
//Make sure it's not WebOS first
        
if ($this->DetectPalmWebOS() == $this->true)
            return 
$this->false;

      
//Most devices nowadays report as 'Palm', but some older ones reported as Blazer or Xiino.
      
if (stripos($this->useragent$this->devicePalm) > -||
          
stripos($this->useragent$this->engineBlazer) > -||
          
stripos($this->useragent$this->engineXiino) > -1)
            return 
$this->true
      else
         return 
$this->false
   }


   
//**************************
   // Detects if the current browser is on a Palm device
   //   running the new WebOS.
   
function DetectPalmWebOS()
   {
      if (
stripos($this->useragent$this->deviceWebOS) > -1)
         return 
$this->true
      else
         return 
$this->false
   }

   
//**************************
   // Detects if the current browser is on an HP tablet running WebOS.
   
function DetectWebOSTablet()
   {
      if ((
stripos($this->useragent$this->deviceWebOShp) > -1)
            && (
stripos($this->useragent$this->deviceTablet) > -1))
         return 
$this->true
      else
         return 
$this->false
   }



   
//**************************
   // Detects if the current browser is Opera Mobile or Mini.
   
function DetectOperaMobile()
   {
      if (
stripos($this->useragent$this->engineOpera) > -1)
      {
         if ((
stripos($this->useragent$this->mini) > -1) ||
          (
stripos($this->useragent$this->mobi) > -1))
            return 
$this->true
         else
            return 
$this->false
      }
      else
         return 
$this->false
   }

   
//**************************
   // Detects if the current browser is Opera Mobile
   // running on an Android phone.
   
function DetectOperaAndroidPhone()
   {
      if ((
stripos($this->useragent$this->engineOpera) > -1) &&
        (
stripos($this->useragent$this->deviceAndroid) > -1) &&
        (
stripos($this->useragent$this->mobi) > -1))
         return 
$this->true
      else
         return 
$this->false
   }

   
//**************************
   // Detects if the current browser is Opera Mobile
   // running on an Android tablet.  
   
function DetectOperaAndroidTablet()
   {
      if ((
stripos($this->useragent$this->engineOpera) > -1) &&
        (
stripos($this->useragent$this->deviceAndroid) > -1) &&
        (
stripos($this->useragent$this->deviceTablet) > -1))
         return 
$this->true
      else
         return 
$this->false
   }

   
//**************************
   // Detects if the current device is an Amazon Kindle (eInk devices only).
   // Note: For the Kindle Fire, use the normal Android methods. 
   
function DetectKindle()
   {
      if (
stripos($this->useragent$this->deviceKindle) > -&&
          
$this->DetectAndroid() == $this->false)
         return 
$this->true
      else
         return 
$this->false
   }
   
   
//**************************
   // Detects if the current Amazon device has turned on the Silk accelerated browsing feature.
   // Note: Typically used by the the Kindle Fire.
   
function DetectAmazonSilk()
   {
      if (
stripos($this->useragent$this->engineSilk) > -1)
         return 
$this->true
      else
         return 
$this->false
   }

   
//**************************
   // Detects if a Garmin Nuvifone device.
   
function DetectGarminNuvifone()
   {
      if (
stripos($this->useragent$this->deviceNuvifone) > -1)
         return 
$this->true
      else
         return 
$this->false
   }
   
   
//**************************
   // Detects a device running the Bada smartphone OS from Samsung.
   
function DetectBada()
   {
      if (
stripos($this->useragent$this->deviceBada) > -1)
         return 
$this->true
      else
         return 
$this->false
   }

   
//**************************
   // Detects a device running the Tizen smartphone OS.
   
function DetectTizen()
   {
      if (
stripos($this->useragent$this->deviceTizen) > -1)
         return 
$this->true
      else
         return 
$this->false
   }

   
//**************************
   // Detects a device running the Meego OS.
   
function DetectMeego()
   {
      if (
stripos($this->useragent$this->deviceMeego) > -1)
         return 
$this->true
      else
         return 
$this->false
   }
   
   
//**************************
   // Detects the Danger Hiptop device.
   
function DetectDangerHiptop()
   {
      if (
stripos($this->useragent$this->deviceDanger) > -||
          
stripos($this->useragent$this->deviceHiptop) > -1)
         return 
$this->true
      else
         return 
$this->false
   }

   
//**************************
   // Detects if the current browser is a Sony Mylo device.
   
function DetectSonyMylo()
   {
      if ((
stripos($this->useragent$this->manuSony) > -1) &&
         ((
stripos($this->useragent$this->qtembedded) > -1) ||
          (
stripos($this->useragent$this->mylocom2) > -1)))
         return 
$this->true
      else
         return 
$this->false
   }
   
   
//**************************
   // Detects if the current device is on one of the Maemo-based Nokia Internet Tablets.
   
function DetectMaemoTablet()
   {
      if (
stripos($this->useragent$this->maemo) > -1)
         return 
$this->true
      
//For Nokia N810, must be Linux + Tablet, or else it could be something else. 
      
if ((stripos($this->useragent$this->linux) > -1)
        && (
stripos($this->useragent$this->deviceTablet) > -1
        && (
$this->DetectWebOSTablet() == $this->false)
        && (
$this->DetectAndroid() == $this->false))
         return 
$this->true
      else
         return 
$this->false
   }

   
//**************************
   // Detects if the current device is an Archos media player/Internet tablet.
   
function DetectArchos()
   {
      if (
stripos($this->useragent$this->deviceArchos) > -1)
         return 
$this->true
      else
         return 
$this->false
   }

   
//**************************
   // Detects if the current device is an Internet-capable game console.
   // Includes many handheld consoles.
   
function DetectGameConsole()
   {
      if ((
$this->DetectSonyPlaystation() == $this->true) ||
         (
$this->DetectNintendo() == $this->true) ||
         (
$this->DetectXbox() == $this->true))
         return 
$this->true
      else
         return 
$this->false
   }
   
   
//**************************
   // Detects if the current device is a Sony Playstation.
   
function DetectSonyPlaystation()
   {
      if (
stripos($this->useragent$this->devicePlaystation) > -1)
         return 
$this->true
      else
         return 
$this->false
   }

   
//**************************
   // Detects if the current device is a handheld gaming device with
   // a touchscreen and modern iPhone-class browser. Includes the Playstation Vita.
   
function DetectGamingHandheld()
   {
      if ((
stripos($this->useragent$this->devicePlaystation) > -1) &&
         (
stripos($this->useragent$this->devicePlaystationVita) > -1))
         return 
$this->true
      else
         return 
$this->false
   }

   
//**************************
   // Detects if the current device is a Nintendo game device.
   
function DetectNintendo()
   {
      if (
stripos($this->useragent$this->deviceNintendo) > -|| 
           
stripos($this->useragent$this->deviceWii) > -||
           
stripos($this->useragent$this->deviceNintendoDs) > -1)
         return 
$this->true
      else
         return 
$this->false
   }

   
//**************************
   // Detects if the current device is a Microsoft Xbox.
   
function DetectXbox()
   {
      if (
stripos($this->useragent$this->deviceXbox) > -1)
         return 
$this->true
      else
         return 
$this->false
   }

   
//**************************
   // Detects whether the device is a Brew-powered device.
   
function DetectBrewDevice()
   {
       if (
stripos($this->useragent$this->deviceBrew) > -1)
         return 
$this->true
      else
         return 
$this->false
   }
   
   
//**************************
   // Detects whether the device supports WAP or WML.
   
function DetectWapWml()
   {
       if (
stripos($this->httpaccept$this->vndwap) > -||
           
stripos($this->httpaccept$this->wml) > -1)
         return 
$this->true
      else
         return 
$this->false
   }
   
   
//**************************
   // Detects if the current device supports MIDP, a mobile Java technology.
   
function DetectMidpCapable()
   {
       if (
stripos($this->useragent$this->deviceMidp) > -|| 
           
stripos($this->httpaccept$this->deviceMidp) > -1)
         return 
$this->true
      else
         return 
$this->false
   }



  
//*****************************
  // Device Classes
  //*****************************
   
   //**************************
   // Check to see whether the device is *any* 'smartphone'.
   //   Note: It's better to use DetectTierIphone() for modern touchscreen devices. 
   
function DetectSmartphone()
   {
      
//Exclude duplicates from TierIphone
      
if (($this->DetectTierIphone() == $this->true)
        || (
$this->DetectS60OssBrowser() == $this->true)
        || (
$this->DetectSymbianOS() == $this->true
        || (
$this->DetectWindowsMobile() == $this->true)
        || (
$this->DetectBlackBerry() == $this->true)
        || (
$this->DetectPalmWebOS() == $this->true))
         return 
$this->true
      else
         return 
$this->false
   }

   
//**************************
   // The quick way to detect for a mobile device.
   //   Will probably detect most recent/current mid-tier Feature Phones
   //   as well as smartphone-class devices. Excludes Apple iPads and other modern tablets.
   
function DetectMobileQuick()
   {
      
//Let's exclude tablets
      
if ($this->isTierTablet == $this->true
         return 
$this->false;
      
      if (
$this->initCompleted == $this->true ||
          
$this->isMobilePhone == $this->true)
         return 
$this->isMobilePhone;

      
//Most mobile browsing is done on smartphones
      
if ($this->DetectSmartphone() == $this->true
         return 
$this->true;

       if (
stripos($this->useragent$this->mobile) > -1)
         return 
$this->true

      if ((
$this->DetectWapWml() == $this->true
            || (
$this->DetectBrewDevice() == $this->true
            || (
$this->DetectOperaMobile() == $this->true))
         return 
$this->true;
         
      if ((
stripos($this->useragent$this->engineObigo) > -1)
            || (
stripos($this->useragent$this->engineNetfront) > -1)
            || (
stripos($this->useragent$this->engineUpBrowser) > -1)
            || (
stripos($this->useragent$this->engineOpenWeb) > -1))
         return 
$this->true
         
      if ((
$this->DetectDangerHiptop() == $this->true
            || (
$this->DetectMidpCapable() == $this->true
            || (
$this->DetectMaemoTablet() == $this->true
            || (
$this->DetectArchos() == $this->true))
         return 
$this->true

       if ((
stripos($this->useragent$this->devicePda) > -1) &&
         !(
stripos($this->useragent$this->disUpdate) > -1))
         return 
$this->true;
      
      
//We also look for Kindle devices
      
if ($this->DetectKindle() == $this->true ||
         
$this->DetectAmazonSilk() == $this->true
         return 
$this->true;

      else
         return 
$this->false
   }
  
   
//**************************
   // The longer and more thorough way to detect for a mobile device.
   //   Will probably detect most feature phones,
   //   smartphone-class devices, Internet Tablets, 
   //   Internet-enabled game consoles, etc.
   //   This ought to catch a lot of the more obscure and older devices, also --
   //   but no promises on thoroughness!
   
function DetectMobileLong()
   {
      if (
$this->DetectMobileQuick() == $this->true
         return 
$this->true
      if (
$this->DetectGameConsole() == $this->true
         return 
$this->true
      if (
$this->DetectSonyMylo() == $this->true
         return 
$this->true

       
//Detect older phones from certain manufacturers and operators. 
       
if (stripos($this->useragent$this->uplink) > -1)
         return 
$this->true
       if (
stripos($this->useragent$this->manuSonyEricsson) > -1)
         return 
$this->true
       if (
stripos($this->useragent$this->manuericsson) > -1)
         return 
$this->true
       if (
stripos($this->useragent$this->manuSamsung1) > -1)
         return 
$this->true

       if (
stripos($this->useragent$this->svcDocomo) > -1)
         return 
$this->true
       if (
stripos($this->useragent$this->svcKddi) > -1)
         return 
$this->true
       if (
stripos($this->useragent$this->svcVodafone) > -1)
         return 
$this->true

      else
         return 
$this->false
   }


  
//*****************************
  // For Mobile Web Site Design
  //*****************************

   //**************************
   // The quick way to detect for a tier of devices.
   //   This method detects for the new generation of
   //   HTML 5 capable, larger screen tablets.
   //   Includes iPad, Android (e.g., Xoom), BB Playbook, WebOS, etc.
   
function DetectTierTablet()
   {
      if (
$this->initCompleted == $this->true ||
          
$this->isTierTablet == $this->true)
         return 
$this->isTierTablet;

      if ((
$this->DetectIpad() == $this->true
         || (
$this->DetectAndroidTablet() == $this->true
         || (
$this->DetectBlackBerryTablet() == $this->true
         || (
$this->DetectWebOSTablet() == $this->true))
         return 
$this->true
      else
         return 
$this->false
   }


   
//**************************
   // The quick way to detect for a tier of devices.
   //   This method detects for devices which can 
   //   display iPhone-optimized web content.
   //   Includes iPhone, iPod Touch, Android, Windows Phone 7 and 8, BB10, WebOS, Playstation Vita, etc.
   
function DetectTierIphone()
   {
      if (
$this->initCompleted == $this->true ||
          
$this->isTierIphone == $this->true)
         return 
$this->isTierIphone;

      if ((
$this->DetectIphoneOrIpod() == $this->true)
            || (
$this->DetectAndroidPhone() == $this->true)
            || (
$this->DetectWindowsPhone() == $this->true)
            || (
$this->DetectBlackBerry10Phone() == $this->true)
            || (
$this->DetectPalmWebOS() == $this->true)
            || (
$this->DetectBada() == $this->true)
            || (
$this->DetectTizen() == $this->true)
            || (
$this->DetectGamingHandheld() == $this->true))
         return 
$this->true
      
      
//Note: BB10 phone is in the previous paragraph
      
if (($this->DetectBlackBerryWebKit() == $this->true) &&
        (
$this->DetectBlackBerryTouch() == $this->true))
         return 
$this->true;
      
      else
         return 
$this->false
   }
   
   
//**************************
   // The quick way to detect for a tier of devices.
   //   This method detects for devices which are likely to be capable 
   //   of viewing CSS content optimized for the iPhone, 
   //   but may not necessarily support JavaScript.
   //   Excludes all iPhone Tier devices.
   
function DetectTierRichCss()
   {
      if (
$this->initCompleted == $this->true ||
          
$this->isTierRichCss == $this->true)
         return 
$this->isTierRichCss;

      if (
$this->DetectMobileQuick() == $this->true
      {
        
//Exclude iPhone Tier and e-Ink Kindle devices
        
if (($this->DetectTierIphone() == $this->true) ||
            (
$this->DetectKindle() == $this->true))
           return 
$this->false;
           
        
//The following devices are explicitly ok.
        
if ($this->DetectWebkit() == $this->true//Any WebKit
           
return $this->true;
        if (
$this->DetectS60OssBrowser() == $this->true)
           return 
$this->true;
           
        
//Note: 'High' BlackBerry devices ONLY
        
if ($this->DetectBlackBerryHigh() == $this->true)
           return 
$this->true;
        
        
//Older Windows 'Mobile' isn't good enough for iPhone Tier. 
        
if ($this->DetectWindowsMobile() == $this->true)
           return 
$this->true;
        if (
stripos($this->useragent$this->engineTelecaQ) > -1)
           return 
$this->true;
         
        
//default
        
else
           return 
$this->false;
      }
      else
         return 
$this->false
   }

   
//**************************
   // The quick way to detect for a tier of devices.
   //   This method detects for all other types of phones,
   //   but excludes the iPhone and RichCSS Tier devices.
   
function DetectTierOtherPhones()
   {
      if (
$this->initCompleted == $this->true ||
          
$this->isTierGenericMobile == $this->true)
         return 
$this->isTierGenericMobile;

      
//Exclude devices in the other 2 categories 
      
if (($this->DetectMobileLong() == $this->true)
        && (
$this->DetectTierIphone() == $this->false)
        && (
$this->DetectTierRichCss() == $this->false))
           return 
$this->true;
      else
         return 
$this->false
   }
      

}


//Was informed by a MobileESP user that it's a best practice 
//  to omit the closing ?&gt; marks here. They can sometimes
//  cause errors with HTML headers.
Онлайн: 2
Реклама