PHP, узнать бот ли это с помощью $_SERVER['HTTP_USER_AGENT']

я создал класс который узнает всю инфу о пользователе

class ABC
{
    const UNKNOWN = 'unknown';

    const PLATFORM_ANDROID = 'android';
    const PLATFORM_IOS     = 'iOS';
    const PLATFORM_LINUX   = 'linux';
    const PLATFORM_MAC     = 'mac';
    const PLATFORM_WINDOWS = 'windows';

    /**
     * Get users browser details
     *
     * @return array
     */
    public function get_browser()
    {
        $user_agent = $_SERVER['HTTP_USER_AGENT'];
        $platform   = $this->get_platform( $user_agent );
        $browser    = $this->get_browser_name( $user_agent );

        // finally get the correct version number
        $known = array( 'Version', $browser['name'], 'rv' );
        if ($browser['name'] === 'Opera') {
            $known = array( 'Version', $browser['name'], 'OPR', 'rv' );
        }
        $pattern = '#(?<browser>' . implode( '|', $known ) . ')[/ |:]+(?<version>[0-9.|a-zA-Z.]*)#';
        preg_match_all( $pattern, $user_agent, $matches );

        // see how many we have
        $i = count( $matches['browser'] );

        if ( $i != 1 )
        {
            //we will have two since we are not using 'other' argument yet
            //see if version is before or after the name
            if ( strripos( $user_agent, 'Version' ) < strripos( $user_agent, $browser['name'] ) )
            {
                $version = $matches['version'][0];
            }
            else
            {
                $version = $matches['version'][1];
            }
        }
        else
        {
            $version = $matches['version'][0];
        }

        // check if we have a number
        if ( $version === null || $version === '' || $version === 0 )
        {
            $version = self::UNKNOWN;
        }

        return array(
            'user_agent' => $user_agent,
            'name'       => $browser['full_name'],
            'short_name' => $browser['short_name'],
            'version'    => floor($version),
            'platform'   => $platform,
            'pattern'    => $pattern
        );
    }

    /**
     * Get browser name details
     *
     * @param $user_agent
     *
     * @return array
     */
    protected function get_browser_name( $user_agent )
    {
        // Next get the name of the useragent yes seperately and for good reason
        if ( preg_match( '/Opera/i',$user_agent ) || preg_match( '/OPR/i',$user_agent ))
        {
            return array(
                'full_name'  => 'Opera',
                'name'       => 'Opera',
                'short_name' => 'opera'
            );
        }
        elseif ( preg_match( '/Edge/i',$user_agent ) )
        {
            return array(
                'full_name'  => 'Microsoft Edge',
                'name'       => 'Edge',
                'short_name' => 'edge'
            );

        } elseif ( preg_match( '/Firefox/i',$user_agent ) )
        {
            return array(
                'full_name'  => 'Mozilla Firefox',
                'name'       => 'Firefox',
                'short_name' => 'ff'
            );
        }
        elseif ( preg_match( '/Chrome/i',$user_agent ) )
        {
            return array(
                'full_name'  => 'Google Chrome',
                'name'       => 'Chrome',
                'short_name' => 'chrome'
            );
        }
        elseif ( preg_match( '/Safari/i',$user_agent ) )
        {
            return array(
                'full_name'  => 'Apple Safari',
                'name'       => 'Safari',
                'short_name' => 'safari'
            );
        }
        elseif ( preg_match( '/MSIE/i',$user_agent ) || preg_match( '/Windows NT/i',$user_agent ) )
        {
            return array(
                'full_name'  => 'Internet Explorer',
                'name'       => 'MSIE',
                'short_name' => 'ie'
            );
        }

        return array(
            'full_name'  => self::UNKNOWN,
            'name'       => self::UNKNOWN,
            'short_name' => self::UNKNOWN
        );
    }

    /**
     * Get users platform (OS)
     *
     * @param $user_agent
     *
     * @return string
     */
    protected function get_platform( $user_agent )
    {
        if ( preg_match( '/android/i', $user_agent ) )
        {
            return self::PLATFORM_ANDROID;
        }
        elseif ( preg_match( '/iphone/i', $user_agent ) || preg_match( '/ipad/i', $user_agent ) || preg_match( '/ipod/i', $user_agent ) )
        {
            return self::PLATFORM_IOS;
        }
        elseif ( preg_match( '/linux/i', $user_agent ) )
        {
            return self::PLATFORM_LINUX;
        }
        elseif ( preg_match( '/macintosh|mac os x/i', $user_agent ) )
        {
            return self::PLATFORM_MAC;
        }
        elseif ( preg_match( '/windows|win32/i', $user_agent ) )
        {
            return self::PLATFORM_WINDOWS;
        }

        return self::UNKNOWN;
    }
}

как мне понять, что это зашел Бот, а не юзер? Потому что не могу понять как это можно реализовать.


Ответы (0 шт):