【讨论】php $_SERVER参数引用的奇怪现象。
先说明,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");
?>
请大家讨论一下是何原因。这个问题困扰我很久了。
...全文
相关推荐
机械三维3D设计图-汽车线束插头压装工装夹具.zip
机械三维3D设计图-汽车线束插头压装工装夹具.zip
Delphi 13.2控件之OmniThreadLibrary-release-3.09.zip
Delphi 13.2控件之OmniThreadLibrary-release-3.09.zip
windows上传cloudflare R2的小工具用ai做的
cloudflare R2上传有个小限制超过200m只能web3或者workers上传,那这个工具就是用于大文件(>200m) web3形式的上传,本地->cloudflare R2
XAgentTeam WSL镜像
XAgentTeam WSL镜像
ECB01C-SOP8蓝牙芯片技术手册V1.3.pdf
ECB01C-SOP8蓝牙芯片技术手册V1.3.pdf 详细介绍了ECB01C-SOP8蓝牙转串口透传芯片的技术参数与使用方法。该芯片支持蓝牙无线通信,可通过串口与单片机连接,实现与手机、电脑等设备的数据传输,具备小体积、高性能、低功耗等特点。文档涵盖产品概述、应用场景、引脚定义、参考原理图、支持的操作平台(如iOS、Android、Windows等)、AT命令说明、电气参数、外形尺寸及技术支持方式等内容。芯片默认工作波特率为9600,支持标准蓝牙服务UUID,适用于智能家居、共享设备、医疗设备等多种场景。


基础编程
