Skip to content

Instantly share code, notes, and snippets.

@AlekVolsk
Last active January 10, 2022 01:32
Show Gist options
  • Save AlekVolsk/95f984c5edb3f2020cb654ef76970006 to your computer and use it in GitHub Desktop.
Save AlekVolsk/95f984c5edb3f2020cb654ef76970006 to your computer and use it in GitHub Desktop.
getInfoBrowser()
<?php
function getInfoBrowser($agent = '')
{
if (empty($agent)) {
$agent = $_SERVER['HTTP_USER_AGENT'];
}
$browserInfo = [];
$browserInfo['ip'] = $_SERVER['REMOTE_ADDR'];
$browserInfo['agent'] = $agent;
$browserInfo['platform'] = 'Unknown';
$browserInfo['mobile'] = strpos($agent, 'Mobile') !== false;
preg_match('/(Android)(?:\'&#x20;| )([0-9.]+)/', $agent, $Android);
preg_match('/(Version)(?:\/| )([0-9.]+)/', $agent, $Safari);
preg_match('/(OPR)(?:\/| )([0-9.]+)/', $agent, $Opera);
preg_match('/(Edge|Edg)(?:\/| )([0-9.]+)/', $agent, $Edge);
preg_match('/(Trident)(?:\/| )([0-9.]+)/', $agent, $IE);
preg_match('/(rv)(?:\:| )([0-9.]+)/', $agent, $rv);
preg_match('/(MSIE|Opera|Firefox|Chrome|Chromium|YandexSearch|YaBrowser)(?:\/| )([0-9.]+)/', $agent, $bi);
$isAndroid = isset($Android[1]);
$isLinux = strpos($agent, 'Linux') !== false && !$isAndroid;
$isWin = strpos($agent, 'Windows') !== false;
$isWin10 = strpos($agent, 'Windows NT 10.0') !== false;
$isiPhone = strpos($agent, 'iPhone') !== false;
$isiPad = strpos($agent, 'iPad') !== false;
$isMacOS = strpos($agent, 'Mac OS') !== false && !$isiPhone && !$isiPad;
if ($isLinux) {
$browserInfo['platform'] = 'Linux';
} elseif ($isAndroid) {
$browserInfo['platform'] = 'Android';
} elseif ($isWin) {
$browserInfo['platform'] = 'Windows';
} elseif ($isMacOS) {
$browserInfo['platform'] = 'MacOS';
} elseif ($isiPad) {
$browserInfo['platform'] = 'iPad';
} elseif ($isiPhone) {
$browserInfo['platform'] = 'iPhone';
}
if ($Safari && !$isAndroid) {
$browserInfo['name'] = 'Safari';
$browserInfo['version'] = (int)$Safari[2];
} elseif ($Opera) {
$browserInfo['name'] = 'Opera';
$browserInfo['version'] = (int)$Opera[2];
} elseif ($Edge) {
$browserInfo['name'] = 'Edge';
$browserInfo['version'] = (int)$Edge[2];
} elseif ($IE) {
$browserInfo['name'] = 'IE';
$browserInfo['version'] = isset($rv[2]) ? (int)$rv[2] : ($isWin10 ? 11 : (int)$IE[2]);
} else {
$browserInfo['name'] = isset($bi[1]) ? $bi[1] : ($isAndroid ? 'Android' : 'Unknown');
$browserInfo['version'] = isset($bi[2]) ? (int)$bi[2] : ($isAndroid ? (float)$Android[2] : 0);
}
$browsers = [
'Chrome' => 32,
'Firefox' => 65,
'Opera' => 19,
'Edge' => 18,
'YaBrowser' => 1,
'YandexSearch' => 1,
'Android' => 4.2,
'MacOS' => 15,
'iPad' => 14,
'iPhone' => 14
];
if ($browserInfo['name'] == 'Safari') {
$browserInfo['webp'] = in_array($browserInfo['platform'], array_keys($browsers)) && ($browserInfo['version'] >= $browsers[$browserInfo['platform']]);
} else {
$browserInfo['webp'] = in_array($browserInfo['name'], array_keys($browsers)) && ($browserInfo['version'] >= $browsers[$browserInfo['name']]);
}
return $browserInfo;
}
<?php
/*
EN: WARNING!
Joomla incorrectly determines the browser version for some Chinese’s native browsers!
For example, version 4.0 is defined for meizu devices, although Chrome/57 is lit in the useragent.
RU: ВАЖНО!
Joomla некорректно определяет версию браузера для "родных" браузеров некоторых китайцев!
Например, для аппаратов meizu определяется версия 4.0, хотя в useragent светится Chrome/57.
*/
function isWebP()
{
$client = \Joomla\CMS\Factory::getApplication()->client;
$browsers = [
19 => 32, // chrome
18 => 65, // firefox
21 => 19, // opera
23 => 18, // edge
9 => 4.2, // adndroid
22 => 4.2, // android tablet
24 => 32 // blink
];
return (bool)in_array($client->browser, array_keys($browsers)) && ($client->browserVersion >= $browsers[$client->browser]);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment