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;
}
}
как мне понять, что это зашел Бот, а не юзер? Потому что не могу понять как это можно реализовать.