繁体   English   中英

PHP中的准确客户端IP

[英]Accurate client IP in PHP

我想在PHP中匹配我的客户端IP。 我已经将客户端IP地址存储在http://www.whatismyip.com/提供的数据库IP地址中。

而在PHP中,我曾经这样获得客户端IP地址

$client_ip = $_SERVER['REMOTE_ADDR'];

但是两个IP地址给出的值是不同的。

有没有办法在PHP中获取正确的IP地址

$_SERVER['REMOTE_ADDR']返回Web服务器看到的请求发起的IP地址。 从本地IP地址访问Web服务器时,情况可能主要不同。 因为whatismyip.com返回您的公共IP,并且您的服务器将收到您本地IP的请求。

尝试从远程位置访问页面,您将正确获得IP。

如果您在本地开发...很显然会有不同的地址:

  • 外部网站将向您展示公共网站
  • 内部站点将向您显示本地站点

请参阅公共/专用IP范围 您能识别私有范围内的本地地址吗?

一旦在线(在不在网络中的服务器上)部署项目,一切都会按预期进行。

最好检测代理服务器的转发IP地址(如果存在)。

if ($_SERVER['HTTP_X_FORWARD_FOR']) {
  $ip = $_SERVER['HTTP_X_FORWARD_FOR'];
} else {
  $ip = $_SERVER['REMOTE_ADDR'];
}

PHP代码现在大多数时候都可以正常工作。

function get_ip_address(){
    foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key){
        if (array_key_exists($key, $_SERVER) === true){
            foreach (explode(',', $_SERVER[$key]) as $ip){
                $ip = trim($ip); // just to be safe

                if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false){
                    return $ip;
                }
            }
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM