【讨论】php $_SERVER参数引用的奇怪现象。

馮強 馮強 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

先说明,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");

?>

请大家讨论一下是何原因。这个问题困扰我很久了。
...全文

相关推荐

评论 3
收藏 已收藏
分享
返回顶部
馮強
基础编程 21,889 成员 140,329 内容