mingyunyuziyou

PHP获取客户端和服务器端IP

作者: 秒速五厘米     
 



//客户端的ip变量:
//客户端IP,也有可能是代理IP
echo  $_SERVER['REMOTE_ADDR']; 

//代理端的IP,可能存在,也可能伪造
echo  $_SERVER['HTTP_CLIENT_IP']; 

//用户在哪个ip上使用的id,可能存在,也可能伪造
echo $_SERVER['HTTP_X_FORWARDED_FOR']; 



//服务端的ip变量:
//需要使用函数gethostname()来获得,这个无论是服务器端还是客户端都能正常显示。
echo  $_SERVER["SERVER_NAME"]; 

//服务器端的ip地址,在服务器端测试ip地址,在客户端测试正常。
echo  $_SERVER["SERVER_ADDR"]; 

//在服务器端测试:127.0.0.1(这个与httpd.conf中BindAddress的设置值相关)。在客户端测试结果正确。


例子:

/**
 * 获取客户端IP地址
 * @return string
 */ 
function get_client_ip() { 
    if(getenv('HTTP_CLIENT_IP')){ 
        $client_ip = getenv('HTTP_CLIENT_IP'); 
    } elseif(getenv('HTTP_X_FORWARDED_FOR')) { 
        $client_ip = getenv('HTTP_X_FORWARDED_FOR'); 
    } elseif(getenv('REMOTE_ADDR')) {
        $client_ip = getenv('REMOTE_ADDR'); 
    } else {
        $client_ip = $_SERVER['REMOTE_ADDR'];
    } 
    return $client_ip; 
}   

/**
 * 获取服务器端IP地址
 * @return string
 */ 
function get_server_ip() { 
    if (isset($_SERVER)) { 
        if($_SERVER['SERVER_ADDR']) {
            $server_ip = $_SERVER['SERVER_ADDR']; 
        } else { 
            $server_ip = $_SERVER['LOCAL_ADDR']; 
        } 
    } else { 
        $server_ip = getenv('SERVER_ADDR');
    } 
    return $server_ip; 
}


总结:

客户端IP:$_SERVER['REMOTE_ADDR']
服务器端IP:$_SERVER["SERVER_ADDR"]