13
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

PHPでユーザエージェントや引数からデバイスを判定

メモ。

Device.class.php
/**
 * デバイス
 *
 * @method is_smartphone
 * @method is_fb_crawler
 * @method pc_or_android_or_ios
 * @method check_strict
 */
class Device
{
    /**
     * スマホか判定
     * @param  string $ua ユーザエージェント
     * @return boolean スマートフォンからのアクセスか否か
     */
    static public function is_smartphone($ua = null)
    {
        if ( is_null($ua) ) {
            $ua = $_SERVER['HTTP_USER_AGENT'];
        }

        if ( preg_match('/iPhone|iPod|iPad|Android/ui', $ua) ) {
            return true;
        } else {
            return false;
        }
    }


    /**
     * Facebookのクローラか判定
     * @return boolean Facebookのクローラか否か
     */
    static public function is_fb_crawler()
    {
        if ( isset($_SERVER['HTTP_USER_AGENT']) && preg_match('/^facebookexternalhit/u', $_SERVER['HTTP_USER_AGENT']) ) {
            return true;
        } else {
            return false;
        }
    }


    /**
     * デバイス判定
     * @param  string $ua ユーザエージェント
     * @return string pc|android|ios
     */
    static public function pc_or_android_or_ios($ua = null)
    {
        if ( is_null($ua) ) {
            $ua = $_SERVER['HTTP_USER_AGENT'];
        }

        if ( preg_match('/iPhone|iPod|iPad/ui', $ua) ) {
            return 'ios';
        } else if ( preg_match('/Android/ui', $ua) ) {
            return 'android';
        } else {
            return 'pc';
        }
    }


    /**
     * 厳密にデバイスを判定
     * @param  string $ua ユーザエージェント
     * @return string|boolean デバイス。Windows|Macintosh|iPhone|iPad|iPod|Android|AndroidTablet|WindowsPhone|false(一致なし)
     */
    static public function check_strict($ua = null)
    {
        if ( is_null($ua) ) {
            $ua = $_SERVER['HTTP_USER_AGENT'];
        }

        if ( preg_match('/Windows Phone/ui', $ua) ) { //UAにAndroidも含まれるので注意
            return 'WindowsPhone';
        } else if ( preg_match('/Windows/', $ua) ) {
            return 'Windows';
        } else if ( preg_match('/Macintosh/', $ua) ) {
            return 'Macintosh';
        } else if ( preg_match('/iPhone/', $ua) ) {
            return 'iPhone';
        } else if ( preg_match('/iPad/', $ua) ) {
            return 'iPad';
        } else if ( preg_match('/iPod/', $ua) ) {
            return 'iPod';
        } else if ( preg_match('/Android/', $ua) ) {
            if ( preg_match('/Mobile/', $ua) ) {
                return 'Android';
            } else {
                return 'AndroidTablet';
            }
        } else {
            return false;
        }
    }
}
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
13
Help us understand the problem. What are the problem?