为什么我得到两个 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];
问题
我使用 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
(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];