转一贴文章,不是对所有代理都有效 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.
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.
我不明白你的“晕”是什么意思?
我试过了用到我所想到的各种方法都不能实现上面的两个功能!如果你能的话就给我说一下?