php获取客户端ip地址

来源:互联网 发布:淘宝代理充值怎么做 编辑:程序博客网 时间:2024/05/22 03:46

php获取客户端ip地址

简介

最近做的项目需要php获取网站客户端访问的ip地址,其实原理很简单,从php的$_SERVER全局数组中直接获取即可。不过有的时候服务器不同或者代理服务器等等问题,索性全部总结一遍,基本各种情况都考虑到了,直接使用即可

代码

<?phpfunction real_ip(){    //静态变量只存在于函数作用域内,也就是说,静态变量只存活在栈中。一般的函数内变量在函数结束后会释放,比如局部变量,但是静态变量却不会    static $realip = NULL;    if ($realip !== NULL)    {        return $realip;    }    //可获取到$_SERVER的情况下    if(isset($_SERVER)){        //如果客户端用了代理ip        if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){            $arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);            /* 取X-Forwarded-For中第一个非unknown的有效IP字符串 */            foreach ($arr AS $ip){                $ip = trim($ip);                if ($ip != 'unknown'){                    $realip = $ip;                    break;                }            }        //代理ip        }elseif (isset($_SERVER['HTTP_CLIENT_IP'])){            $realip = $_SERVER['HTTP_CLIENT_IP'];        //握手ip,有代理则是代理ip,没有代理则是真实ip        }else{            if (isset($_SERVER['REMOTE_ADDR'])){                $realip = $_SERVER['REMOTE_ADDR'];            }else{                $realip = '0.0.0.0';            }        }    //获取不到$_SERVER的情况下    }else{        if (getenv('HTTP_X_FORWARDED_FOR')){            $realip = getenv('HTTP_X_FORWARDED_FOR');        }elseif (getenv('HTTP_CLIENT_IP')){            $realip = getenv('HTTP_CLIENT_IP');        }else{            $realip = getenv('REMOTE_ADDR');        }    }    //最后正则过滤ip地址    preg_match("/[\d\.]{7,15}/", $realip, $onlineip);    $realip = !empty($onlineip[0]) ? $onlineip[0] : '0.0.0.0';    return $realip;}echo real_ip();

原创粉丝点击