PHP中准确的客户端IP

时间:2013-07-04 06:10:05

标签: php ip-address

我希望在PHP中匹配我的客户端IP。我已将客户端IP地址存储在http://www.whatismyip.com/给出的数据库IP地址中。

虽然在PHP中我曾经像这样获得客户端IP地址

$client_ip = $_SERVER['REMOTE_ADDR'];

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

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

4 个答案:

答案 0 :(得分:1)

$_SERVER['REMOTE_ADDR']返回Web服务器看到的请求所源自的IP地址。当您从本地IP地址访问Web服务器时,这可能主要不同。因为whatismyip.com会返回您的公共IP,您的服务器将从您的本地IP获得请求。

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

答案 1 :(得分:0)

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

  • 外部网站会向您显示公众
  • 内部网站会向您显示本地网站

Public/Private IP ranges。你认识到私人范围内的本地地址吗?

一旦您在线部署项目(在不在您网络中的服务器上),事情将按预期工作。

答案 2 :(得分:0)

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

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

PHP代码现在大部分时间都应该正常工作。

答案 3 :(得分:0)

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;
                }
            }
        }
    }
}