为什么我得到两个 IP 地址?

Why am I getting two IP Addresses?

问题

我使用 php 和一个 api 来使用用户 IP 获取本地货币。它已经工作了一段时间了,但突然之间,我的 ISP 一直给我两个 IP 地址。

通常如果我回显 $ipaddress,我会得到类似 xxx.xxx.xxx.xxx 的结果,所以它会像这样通过 API

https://usercountry.com/v1.0/json/xxx.xxx.xxx.xxx?token=<API KEY>

但最近 $ipaddress 给我两个像这样的 IP(不同的 IP 地址)xxx.xxx.xxx,yyy.yyy.yyy

所以现在它像这样通过了 API https://usercountry.com/v1.0/json/xxx.xxx.xxx.xxx,yyy.yyy.yyy.yyy?token=<API KEY>

其中 returns 一个错误,因为 UserCountry.com 不允许双 IP

每当双 IP 发生时,我都会使用此检查

if (strlen($ipaddress) > 15){
     $ipaddress = "Double IP";
}

我的分析

$ipaddress= xxx.xxx.xxx.xxx,yyy.yyy.yyy.yyy

当它发生时,第一个 IP (xxx.xxx.xxx.xxx) 看起来像真实的(IP 与我在同一个国家),但第二个 IP (yyy.yyy.yyy.yyy) 不在同一个国家和我一起,

我想要的

所以我想写一个 php 代码来仅回显来自 xxx.xxx.xxx.xxx,yyy.yyy.yyy.yyy

的第一个 IP 地址 (xxx.xxx.xxx.xxx)

谢谢

编辑

有些人想知道我如何获取 IP 地址到 $ipaddress

if (isset($_SERVER['HTTP_CLIENT_IP']))
        $ipaddress = $_SERVER['HTTP_CLIENT_IP'];
    else if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
        $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
    else if(isset($_SERVER['HTTP_X_FORWARDED']))
        $ipaddress = $_SERVER['HTTP_X_FORWARDED'];
    else if(isset($_SERVER['HTTP_FORWARDED_FOR']))
        $ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
    else if(isset($_SERVER['HTTP_FORWARDED']))
        $ipaddress = $_SERVER['HTTP_FORWARDED'];
    else if(isset($_SERVER['REMOTE_ADDR']))
        $ipaddress = $_SERVER['REMOTE_ADDR'];

当我使用http://ip-api.com/查看我的IP地址时,我实际上得到了两个IP地址 xxx.xxx.xxx,yyy.yyy.yyy

$ipaddress = explode(',', $ipaddress)[0];


Explode returns an array of strings, each of which is a substring of string formed by splitting it on boundaries…



但要注意: 直接在函数行上选择 array-entry 在 PHP 5.4.

之前是不工作的

行业术语是 array dereferencing



您获取的 IP 似乎使用了某种代理。 尝试用PHPexplode的方法把IP用(,)分割出来,然后选择第一个

$ips = explode(',', $ipaddress);
$theOneYouWant = $ips[0];