问题
我使用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>
返回错误,因为UserCountry.com不允许双IP
我在Double 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)
xxx.xxx.xxx.xxx,yyy.yyy.yyy.yyy
谢谢
修改
有些人想知道我如何获得$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
答案 0 :(得分:2)
您获得的IP似乎正在使用某种代理。
尝试使用PHP explode
方法将()拆分IP,然后选择第一个。
$ips = explode(',', $ipaddress);
$theOneYouWant = $ips[0];
答案 1 :(得分:0)
$ipaddress = explode(',', $ipaddress)[0];
Explode返回一个字符串数组,每个字符串都是通过在边界上拆分而形成的字符串子串...
但要注意:直接在功能行上选择数组条目 - 不是 - 在PHP 5.4之前工作。
行业术语是array dereferencing
。