PHP中查看真实IP方法destes at ix dot netcom dot com dot nospam
16-Mar-2002 03:40 Further complicating the debate about getting someone's ip, I should note that getenv() doesn't exist in ISAPI mode. However, the $_SERVER array exists even in ISAPI mode if PHP is 4.1.0 or over. So, in order to accomodate ISAPI mode, you can get IPs like this:function getip() {
if ($_SERVER) {
if ( $_SERVER[HTTP_X_FORWARDED_FOR] ) {
$realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
} elseif ( $_SERVER["HTTP_CLIENT_ip"] ) {
$realip = $_SERVER["HTTP_CLIENT_ip"];
} else {
$realip = $_SERVER["REMOTE_ADDR"];
}} 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' );
}
}
return $realip; 
}If you're running ISAPI mode below PHP 4.1.0, you'd have to modify this to use the array $HTTP_SERVER_VARS, but those cases will be few indeed.
nielsvanhove dot N dot O dot S dot P dot A dot M at hotmail dot com
16-Apr-2002 07:22 Some improvements of the script from above:
function getip() {
if (isSet($_SERVER)) {
if (isSet($_SERVER["HTTP_X_FORWARDED_FOR"])) {
$realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
} elseif (isSet($_SERVER["HTTP_CLIENT_ip"])) {
$realip = $_SERVER["HTTP_CLIENT_ip"];
} else {
$realip = $_SERVER["REMOTE_ADDR"];
}} 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' );
}
}
return $realip; 
}(just added some issets and ")
admin at SexDev dot com
25-Apr-2002 02:17 The problem with empty HTTP_X_FORWARDED_FOR is because of anonymous proxy servers:Anonymous - HTTP Proxy server does not send HTTP_X_FORWARDED_FOR variable to host, this improves privacy since your ip address cannot be logged.High anonymity - HTTP Servers of this type don抰 send HTTP_X_FORWARDED_FOR, HTTP_VIA and HTTP_PROXY_CONNECTION variables. Host doesn抰 even know you are using proxy server an of course it doesn抰 know your ip address.检查ip是否合法function checkip($ip){
        $e="(1[0-9]{2}|[1-9]?[0-9]|2[0-4][0-9]|25[0-5])";
        if(ereg("^$e\.$e\.$e\.$e$",$ip)){
                return 1;
        }else{
                return 0;
        }
}