【讨论】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");

?>

请大家讨论一下是何原因。这个问题困扰我很久了。
...全文
104 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
馮強 2002-12-10
  • 打赏
  • 举报
回复
程序中的多出来的$,是我贴上来时改成另一种写法时手误,但确实有这个的问题。$_SERVER["HTTP_X_FORWARDED_FOR"]和$HTTP_X_FORWARDED_FOR在子程序中不能正确返回值。

比如下面的程序没错吧,就是返不回值.
<?php
getip();


function getip() {
if ($_SERVER) {
if ( $HTTP_X_FORWARDED_FOR ) {
$realip = $HTTP_X_FORWARDED_FOR;
} elseif ( $HTTP_CLIENT_IP ) {
$realip = $HTTP_CLIENT_IP;
} else {
$realip = $REMOTE_ADDR;
}

} else {
if ( $HTTP_X_FORWARDED_FOR ) {
$realip = $HTTP_X_FORWARDED_FOR;
} elseif ( $HTTP_CLIENT_IP) {
$realip = $HTTP_CLIENT_IP;
} else {
$realip = $REMOTE_ADDR;
}

}
print($realip."<br>\n");

return $realip;
}

?>

tntxhy 2002-12-10
  • 打赏
  • 举报
回复
提问之前应该仔细看自己的程序。
phpteam 2002-12-10
  • 打赏
  • 举报
回复
$_SERVER["'$HTTP_X_FORWARD_FOR"];
==>
$_SERVER["HTTP_X_FORWARD_FOR"];

$HTTP_SERVER_VARS["$REMOTE_ADDR"];
==>
$HTTP_SERVER_VARS["REMOTE_ADDR"];

......

这是你自己粗心所导致的!

21,893

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧