server/app/Utils/Ip.php

46 lines
1.2 KiB
PHP

<?php
/**
* Author: cfn <cfn@leapy.cn>
*/
namespace App\Utils;
use Hyperf\Context\ApplicationContext;
use Hyperf\HttpServer\Contract\RequestInterface;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
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");
}
}