我正在为Wordpress构建一个插件,以便在woocommerce中创建新的支付网关。在这个插件中,我需要将客户端的ip地址发送给api。
好吧,当我在插件php文件中使用时,$ _SERVER ['REMOTE_ADDR']没有给我正确的IP地址。 WC_Geolocation :: get_ip_address()也不起作用,如果我在插件文件中使用它们,它们都给我服务器ip。 如果我在footer.php中使用它们,它会给我正确的IP地址。所以,它一定不是关于服务器配置,实际上,当我尝试在收据页面显示客户端ip时,在收据部分,它们都给我服务器ip,而他们给我正确的ip页脚。
使用$ _SERVER ['REMOTE_ADDR']时显示服务器IP地址的原因是什么?
还有其他选择吗?
答案 0 :(得分:2)
您可以使用此功能:
// Function to get the client IP address
static function get_client_ip() {
$ipaddress = '';
if (isset($_SERVER['HTTP_CLIENT_IP'])) {
$ipaddress .= $_SERVER['HTTP_CLIENT_IP'] . ' - ';
}
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ipaddress .= $_SERVER['HTTP_X_FORWARDED_FOR']. ' - ';
}
if(isset($_SERVER['HTTP_X_FORWARDED'])) {
$ipaddress .= $_SERVER['HTTP_X_FORWARDED']. ' - ';
}
if(isset($_SERVER['HTTP_FORWARDED_FOR'])) {
$ipaddress .= $_SERVER['HTTP_FORWARDED_FOR']. ' - ';
}
if(isset($_SERVER['HTTP_FORWARDED'])) {
$ipaddress .= $_SERVER['HTTP_FORWARDED']. ' - ';
}
if(isset($_SERVER['REMOTE_ADDR'])) {
$ipaddress .= $_SERVER['REMOTE_ADDR']. ' - ';
}
if($ipaddress == '') {
$ipaddress = 'UNKNOWN';
}
return $ipaddress;
}
答案 1 :(得分:1)
使用$ _SERVER [' REMOTE_ADDR']时显示服务器IP地址的原因是什么?
REMOTE_ADDR
只能选择最近的"请求IP。如果中间还有其他IP(例如来自代理,例如网络局域网的路由器),则不会返回用户的IP - 我猜测的就是你之后的
虽然上面的第一个响应者的功能应该起作用(注意另一个响应$_SERVER
超全球键),这只是OP问题的一部分。我相信的原因是这些代理是否/何时实际上为每个请求发送这些备用标头。