【讨论】php $_SERVER参数引用的奇怪现象。
馮強 2002-12-10 03:52:00
先说明,php.ini中的register_global已置成On
下面的程序,是查找登录用户的IP,如果不是函数,则一切正常。
<?php
FUNCTION getip(){
if ($_SERVER["HTTP_X_FORWARDED_FOR"]) {
$ip = $_SERVER["'$HTTP_X_FORWARD_FOR"];
$host = gethostbyaddr($ip);
} else {
$ip = $_SERVER["REMOTE_ADDR"];
$host = gethostbyaddr($ip);
}
print($ip."<br>\n");
print($host."<br>\n");
}
?>
但是如果把上面的程序放在程序中的函数引用,就不能返回正确的结果。只有改成下面的代码才行。
<?php
FUNCTION getip(){
if (GETENV("HTTP_X_FORWARDED_FOR")) {
$ip = getenv('$HTTP_X_FORWARD_FOR'); //只能用getenv获得
$host = gethostbyaddr($ip);
} else {
$ip = getenv('REMOTE_ADDR'); //只能用getenv获得
$host = gethostbyaddr($ip);
}
print($ip."<br>\n");
print($host."<br>\n");
}
getip();
?>
下面的程序就更邪门。
代码:--------------------------------------------------------------------------------
<?php
if ($_SERVER) {
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");
// 改成 $realip = $HTTP_SERVER_VARS["$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');
// 改成 $realip = $REMOTE_ADDR; 也死活没输出
}
}
print($realip."<br>\n");
?>
请大家讨论一下是何原因。这个问题困扰我很久了。