【发布时间】:2011-09-08 17:19:32
【问题描述】:
我阅读了一些已经提出的问题,我发现这很有用,虽然我没有尝试过Working with IPv6 Addresses in PHP
不过,假设我在 MySQL 中有一个“禁止”表。我将如何存储 IPv6 地址?该方法必须是通用的,即该字段必须能够包含 ipv4 或 ipv6 地址。这也必须适用于我的用户表中的 ip_addr 字段。
我通常会检查if(getip == $bans['ip']) { do something }
但是我的 getip 函数是针对 ipv4 afaik 的,我想知道它是否可以工作。
我使用的函数是
function getip()
{
if(isset($_SERVER['REMOTE_ADDR']))
{
$ip = $_SERVER['REMOTE_ADDR'];
}
elseif(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
{
if(preg_match_all("#[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}#s", $_SERVER['HTTP_X_FORWARDED_FOR'], $addresses))
{
foreach($addresses[0] as $key => $val)
{
if(!preg_match("#^(10|172\.16|192\.168)\.#", $val))
{
$ip = $val;
break;
}
}
}
}
if(!isset($ip))
{
if(isset($_SERVER['HTTP_CLIENT_IP']))
{
$ip = $_SERVER['HTTP_CLIENT_IP'];
}
else
{
$ip = '';
}
}
$ip = preg_replace("#([^.0-9 ]*)#", "", $ip);
return $ip;
}
【问题讨论】: