「代码复用」获取客户端IP

Don’t repeat yourself

直接上源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php

// Client releated operations
// @caoxl

namespace App\Traits;

class Client
{
public static function ip()
{
if ($clientIP = self::tryIPKey('HTTP_CLIENT_IP')) {
} elseif ($clientIP = self::tryIPKey('HTTP_X_FORWARDED_FOR')) {
} elseif ($clientIP = self::tryIPKey('HTTP_X_FORWARDED')) {
} elseif ($clientIP = self::tryIPKey('HTTP_FORWARDED_FOR')) {
} elseif ($clientIP = self::tryIPKey('HTTP_FORWARDED')) {
} elseif ($clientIP = self::tryIPKey('REMOTE_ADDR')) {
} else $clientIP = 'UNKNOWN';

return $clientIP;
}

public static function tryIPKey(string $possibleKey)
{
return getenv($possibleKey)
?? (
$_SERVER[$possibleKey] ?? null
);
}
}

说明:

  • getenv() - 获取一个环境变量的值

  • HTTP_CLIENT_IP - $_SERVER[‘HTTP_CLIENT_IP’]

HTTP_CLIENT_IP 是代理服务器发送的HTTP头。如果是“超级匿名代理”,则返回none值

  • HTTP_X_FORWARDED_FOR - $_SERVER[‘HTTP_X_FORWARDED_FOR’]

用来识别经过HTTP代理后的客户端IP地址(有可能存在,也可以伪造)

  • HTTP_X_FORWARDED - $_SERVER[‘HTTP_X_FORWARDED’]

  • HTTP_FORWARDED_FOR - $_SERVER[‘HTTP_FORWARDED_FOR’]

X-Forwarded-For(XFF)是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段

  • HTTP_FORWARDED - $_SERVER[‘HTTP_FORWARDED’]

  • REMOTE_ADDR - $_SERVER[‘REMOTE_ADDR’]

REMOTE_ADDR 是你的客户端跟你的服务器“握手”时候的IP。如果使用了“匿名代理”,REMOTE_ADDR将显示代理服务器的IP。
浏览当前页面的用户的 IP 地址。

Powered by Hexo and Hexo-theme-hiker

Copyright © 2017 - 2023 Keep It Simple And Stupid All Rights Reserved.

访客数 : | 访问量 :