0

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

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

$client_ip = $_SERVER['REMOTE_ADDR'];

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

有什么方法可以在 PHP 中获取正确的 IP 地址

4

4 回答 4

1

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

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

于 2013-07-04T06:15:35.470 回答
0

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

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

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

于 2013-07-04T09:37:26.293 回答
0

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

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

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

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

于 2013-07-04T06:15:51.843 回答
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;
                }
            }
        }
    }
}
于 2013-07-04T10:09:28.070 回答