Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我的php代码没有返回正确的ip地址?_Php_Ip_Ip Address - Fatal编程技术网

我的php代码没有返回正确的ip地址?

我的php代码没有返回正确的ip地址?,php,ip,ip-address,Php,Ip,Ip Address,我目前有一个php函数,用来确定我网站上每个访问者的ip地址,但出于某种原因,它会不断返回此ip地址:10.1.1.27即使我使用vpn更改我的ip地址(到不同的国家,例如美国、德国、英国),它仍会返回该地址。我希望有人能给我解释一下,如果可能的话,告诉我这是不是我的代码有问题 功能: function getIP(){ foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X

我目前有一个php函数,用来确定我网站上每个访问者的ip地址,但出于某种原因,它会不断返回此ip地址:10.1.1.27即使我使用vpn更改我的ip地址(到不同的国家,例如美国、德国、英国),它仍会返回该地址。我希望有人能给我解释一下,如果可能的话,告诉我这是不是我的代码有问题

功能:

function getIP(){
    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); 
                if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false){
                  return $ip;
                }else{
                    echo $ip;
                    throw new Exception("IP address is not valid");
                }
            }
        }
    }
}

我的猜测是,你有一个防火墙或其他一些物理设备,它正在监听访问者的IP地址

您是否执行了反向查找以查看网络上的IP地址

这可能会对你有所帮助

<?php
    if (getenv('HTTP_X_FORWARDED_FOR')) {
        $pipaddress = getenv('HTTP_X_FORWARDED_FOR');
        $ipaddress = getenv('REMOTE_ADDR');
        echo "Your Proxy IP address is : ".$pipaddress. "(via $ipaddress)" ;
    } else {
        $ipaddress = getenv('REMOTE_ADDR');
        echo "Your IP address is : $ipaddress";
    }
?>

我也有同样的问题。事实证明,我得到的是代理IP地址,而不是我自己的IP地址。所以我跑了:

var_dump($_SERVER) 
//you could also use print_r($_SERVER);
然后寻找这样的东西:

 ["HTTP_X_REAL_IP"]
$ip = getenv('HTTP_X_REAL_IP')
然后将其捕获到一个变量中,如下所示:

 ["HTTP_X_REAL_IP"]
$ip = getenv('HTTP_X_REAL_IP')

此代码所在的服务器在哪里?它在你的网络上吗?代码位于我工作的服务器上。是的,它在我的网络上,但这就是为什么我要使用VPN扩展来测试它,它改变了我的IP。
IP
它的输出是你本地的,你仍然在本地连接到它,尽管VPNhrm听起来像是你的权利!谢谢,我将尝试在一台没有连接到我的works本地网络的机器上测试它。好的,它成功了!非常感谢,救生员:)