82 lines
2.4 KiB
PHP
82 lines
2.4 KiB
PHP
<?php
|
|
/**
|
|
* Author: cfn <cfn@leapy.cn>
|
|
*/
|
|
|
|
namespace App\Utils;
|
|
|
|
use Hyperf\Context\ApplicationContext;
|
|
use Hyperf\HttpServer\Contract\RequestInterface;
|
|
|
|
class Ip
|
|
{
|
|
/**
|
|
* Author: cfn <cfn@leapy.cn>
|
|
* @return string
|
|
*/
|
|
public static function ip(): string
|
|
{
|
|
$container = ApplicationContext::getContainer();
|
|
$request = $container->get(RequestInterface::class);
|
|
$res = $request->getHeaders();
|
|
if (isset($res['http_client_ip'])) {
|
|
return $res['http_client_ip'][0];
|
|
} elseif (isset($res['x-real-ip'])) {
|
|
return $res['x-real-ip'][0];
|
|
} elseif (isset($res['x-forwarded-for'])) {
|
|
return $res['x-forwarded-for'][0];
|
|
} else {
|
|
$serverParams = $request->getServerParams();
|
|
return $serverParams['remote_addr'][0];
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Author: cfn <cfn@leapy.cn>
|
|
* @return string
|
|
*/
|
|
public static function ua(): string
|
|
{
|
|
$container = ApplicationContext::getContainer();
|
|
$request = $container->get(RequestInterface::class);
|
|
return $request->header("user-agent", "unknown");
|
|
}
|
|
|
|
public static function getBrowserAndOS(string $userAgent): array
|
|
{
|
|
$browser = 'Unknown';
|
|
$os = 'Unknown';
|
|
// 操作系统识别
|
|
if (preg_match('/windows/i', $userAgent)) {
|
|
$os = 'Windows';
|
|
} elseif (preg_match('/macintosh|mac os x/i', $userAgent)) {
|
|
$os = 'Mac OS';
|
|
} elseif (preg_match('/linux/i', $userAgent)) {
|
|
$os = 'Linux';
|
|
} elseif (preg_match('/iphone/i', $userAgent)) {
|
|
$os = 'iPhone';
|
|
} elseif (preg_match('/android/i', $userAgent)) {
|
|
$os = 'Android';
|
|
}
|
|
|
|
// 浏览器识别
|
|
if (preg_match('/MSIE|Trident/i', $userAgent)) {
|
|
$browser = 'Internet Explorer';
|
|
} elseif (preg_match('/Edge/i', $userAgent)) {
|
|
$browser = 'Microsoft Edge';
|
|
} elseif (preg_match('/Firefox/i', $userAgent)) {
|
|
$browser = 'Mozilla Firefox';
|
|
} elseif (preg_match('/Chrome/i', $userAgent)) {
|
|
$browser = 'Google Chrome';
|
|
} elseif (preg_match('/Safari/i', $userAgent)) {
|
|
$browser = 'Safari';
|
|
} elseif (preg_match('/Opera|OPR/i', $userAgent)) {
|
|
$browser = 'Opera';
|
|
}
|
|
|
|
return [
|
|
'browser' => $browser,
|
|
'os' => $os,
|
|
];
|
|
}
|
|
} |