0

我有某个国家的 IP 数据库。我已经支付了 Ip2Lcoation 版本,并且获得了所有 IPv6 范围和 IPv4。在我的网络应用程序中,我使用 ip2long 函数将所有 IP 转换为 long。

它与 IPv4 完美配合,但在 IPv6 上却失败了?我搜索并发现了一些不起作用的功能。我的代码如下

if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
        $ip = $_SERVER['HTTP_CLIENT_IP'];
    } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    } else {
        $ip = $_SERVER['REMOTE_ADDR'];
    }
    
    
    $long = ip2long($ip);// fails at IPv6
    //mysql query to check the ip ranges
    $cri= new CDbCriteria();
    $cri->condition="$long>=ip_range_start AND $long<=ip_range_end";
    if (UsaIps::model()->exists($cri))
    {
       return true;
    }
    else
    {
        return false;
    }

我怎样才能做到这一点?

任何指导任何帮助?

4

0 回答 0