【发布时间】:2010-10-25 06:54:32
【问题描述】:
复制:
编辑:服务器是一个通过 suPHP 运行 PHP5 的 Debian linux 机器。以上帖子已阅读。此代码涵盖了所有提到的点,但仍返回未知地址。
我的代码总是要求知道远程 IP 地址。一旦我们可以得到一些访问的IP地址,我们是否选择代理地址并不重要。
下面的函数是我们目前使用的,但是在超过 20% 的套件中,服务器会陷入未知情况,并且 $_SERVER 变量中没有任何内容。
function getip()
{
if ( $_SERVER["HTTP_CLIENT_IP"] && strcasecmp($_SERVER["HTTP_CLIENT_IP"], "unknown") )
{
$ip = $_SERVER["HTTP_CLIENT_IP"];
}
else if ( $_SERVER["HTTP_X_FORWARDED_FOR"] && strcasecmp($_SERVER["HTTP_X_FORWARDED_FOR"], "unknown") )
{
$ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
}
else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
{
$ip = getenv("REMOTE_ADDR");
}
else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
{
$ip = $_SERVER['REMOTE_ADDR'];
}
else
{
$ip = "unknown: ".var_dump($_SERVER, true);
}
return($ip);
}
【问题讨论】:
-
您使用的是什么服务器?您可能想阅读stackoverflow.com/questions/55768/…
-
阅读。如果您查看上面的代码,它会检查该帖子中提到的所有字段。
-
您使用的是什么服务器?了解版本会非常有用
-
您不能信任 HEEP_X_FORWARDED_FOR 标头,因为它是由客户端设置的。
-
忘记了这个。它不是重复的。正如我所说,代码实际上没有设置 remoteip。问题最终与自动脚本调用的脚本相关联。 PHP 未设置未通过网络服务器调用的 IP 变量。
标签: php