شناسایی platform یوزر با PHP

Sarp

مدیر بازنشسته
یکی از یوزرها ازم سوال پرسیده بود که پیامش رو قاطی بقیه از صندوق پاک کردم و چون یادم نیست کی بود ، جوابش رو اینجا میذارم تا شاید ببینه و استفاده کنه .

ایشون پرسیده بودند چجوری میتونم تشخیص بدم بازدید کننده با چه پلتفرمی وارد سایت شده .
مثلا با موبایل و . . . .

یه کلاسی هست به اسم Mobile_Detect که دقیقا همین کار رو انجام میده
فایل اصلیش رو بعدا پیدا کنم میذارم همینجا .

این هم سورس کلاس مذکور :

PHP:
<?php

class Mobile_Detect {
    
    protected $accept;
    protected $userAgent;
    
    protected $isMobile     = false;
    protected $isAndroid    = null;
    protected $isBlackberry = null;
    protected $isOpera      = null;
    protected $isPalm       = null;
    protected $isWindows    = null;
    protected $isGeneric    = null;

    protected $devices = array(
        "android"       => "android",
        "blackberry"    => "blackberry",
        "iphone"        => "(iphone|ipod)",
        "opera"         => "opera mini",
        "palm"          => "(avantgo|blazer|elaine|hiptop|palm|plucker|xiino)",
        "windows"       => "windows ce; (iemobile|ppc|smartphone)",
         "generic"       =>  "(kindle|mobile|mmp|midp|o2|pda|pocket|psp|symbian|smartphone|treo|up.browser|up.link|vodafone|wap)"
    );


    public function __construct() {
        $this->userAgent = $_SERVER['HTTP_USER_AGENT'];
        $this->accept    = $_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') > 0 ||  strpos($accept,'application/vnd.wap.xhtml+xml') > 0) {
            $this->isMobile = true;
        } else {
            foreach ($this->devices as $device => $regexp) {
                if ($this->isDevice($device)) {
                    $this->isMobile = true;
                }
            }
        }
    }


    public function __call($name, $arguments) {
        $device = substr($name, 2);
        if ($name == "is" . ucfirst($device)) {
            return $this->isDevice($device);
        } else {
            trigger_error("Method $name not defined", E_USER_ERROR);
        }
    }


    public function isMobile() {
        return $this->isMobile;
    }


    protected function isDevice($device) {
        $var    = "is" . ucfirst($device);
         $return = $this->$var === null ? (bool) preg_match("/" .  $this->devices[$device] . "/i", $this->userAgent) :  $this->$var;

        if ($device != 'generic' && $return == true) {
            $this->isGeneric = false;
        }

        return $return;
    }
}

فرض میکنیم یه فایل babak.php داریم که میخوایم اگه کسی با موبایل وارد این صفحه شد ، واسش یه پیام نشون داده بشه .
فایل babak.php رو اینجوری کدنویسی میکنیم :

PHP:
<?php
    include("Mobile_Detect.php");
    $detect = new Mobile_Detect();
    
    if ($detect->isAndroid()) {
        // code to run for the Android
    }
    
    if ($detect->isIphone()) {
        // code to run for iPhone
    }    
    
    if ($detect->isMobile()) {
        // code to run for any mobile platform
    }
?>

کلاس Mobile_Detect رو اینکلود میکنیم
یه شی از کلاس Mobile_Detect تعریف میکنیم .
if اولی میگه اگه پلتفرم ، آندروید هست ، فلان کد رو اجرا کن (این کد میتونه یه پیام ساده باشه و یا هر دستور دیگه ای)
if دومی میگه اگه پلتفرم یوزر ، آیفون بود فلان کد رو اجرا کن
if سوم هم میگه اگه موبایل باشه ، فلان دستور(ات) رو اجرا کن .

این کلاس شامل شناسایی تعداد زیادی از پلتفرمها مثل Opera mini و Blackberry و Palm و . . . .هست .
 
آخرین ویرایش:

Sharif_

مدیر بازنشسته
راحت ترین کار فکر کنم استفاده از کلاس browser هست
PHP:
$browser = new Browser();
echo ($browser->getBrowser());
که براوزر های زیر رو با ورژنشون تشخیص میده
کد:
Opera (Browser::BROWSER_OPERA)
WebTV (Browser::BROWSER_WEBTV)
NetPositive (Browser::BROWSER_NETPOSITIVE)
Internet Explorer (Browser::BROWSER_IE)
Pocket Internet Explorer (Browser::BROWSER_POCKET_IE)
Galeon (Browser::BROWSER_GALEON)
Konqueror (Browser::BROWSER_KONQUEROR)
iCab (Browser::BROWSER_ICAB)
OmniWeb (Browser::BROWSER_OMNIWEB)
Phoenix (Browser::BROWSER_PHOENIX)
Firebird (Browser::BROWSER_FIREBIRD)
Firefox (Browser::BROWSER_FIREFOX)
Mozilla (Browser::BROWSER_MOZILLA)
Amaya (Browser::BROWSER_AMAYA)
Lynx (Browser::BROWSER_LYNX)
Safari (Browser::BROWSER_SAFARI)
iPhone (Browser::BROWSER_IPHONE)
iPod (Browser::BROWSER_IPOD)
Google’s Android(Browser::BROWSER_ANDROID)Google’s Chrome(Browser::BROWSER_CHROME)
GoogleBot(Browser::BROWSER_GOOGLEBOT)
Yahoo!’s Slurp(Browser::BROWSER_SLURP)
W3C’s Validator(Browser::BROWSER_W3CVALIDATOR)
BlackBerry(Browser::BROWSER_BLACKBERRY)
 

Sarp

مدیر بازنشسته
منظور پلتفرمهای موبایله

من هم از این کلاس ، کلاسی بهتر واسه این کار ندیده ام
 

Sharif_

مدیر بازنشسته
خب این کلاس براوزر موبایل ها رو هم تشخیص میده دیگه
 
بالا