大家都问了好多次关于IP的问题我还是有些不明白,所以再次想请求帮助这问题:
条件:
表名:iplimt 
fromIP1 fromIP2 fromIP3 fromIP4  toIP1 toIP2 toIP3 toIP4  description
61      29      61      0        61     29    61    255   广东省广州市
.....问题:
如果当前用户IP在iplimt表中的某条记录范围内就无法访问,或者就可以。我自己弄了一个,但总是有问题,问题就是当前用户IP的第一个数大于数据库里面的相同位置的数时就没有办法正确判断了,比如:当前IP是51.29.61.45 那就没有办法在61      29      61      0        61     29    61    255 中判断。我的程序如下,请各位帮忙改改:
<?php
if(getenv(HTTP_CLIENT_IP)) { 
$onlineip = getenv(HTTP_CLIENT_IP); 
} elseif(getenv(HTTP_X_FORWARDED_FOR)) { 
$onlineip = getenv(HTTP_X_FORWARDED_FOR); 
} elseif(getenv(REMOTE_ADDR)) { 
$onlineip = getenv(REMOTE_ADDR); 
} else { 
$onlineip = $HTTP_SERVER_VARS[REMOTE_ADDR]; 

$sqltmp3 = "select * from iplimit";
$rstmp3 = &$conn->Execute($sqltmp3) or die($rstmp3);
while (!$rstmp3->EOF)
{
   $fromIP1 = $rstmp3->fields("fromIP1");
   $fromIP2 = $rstmp3->fields("fromIP2");
   $fromIP3 = $rstmp3->fields("fromIP3");
   $fromIP4 = $rstmp3->fields("fromIP4");
   $toIP1 = $rstmp3->fields("toIP1");
   $toIP2 = $rstmp3->fields("toIP2");
   $toIP3 = $rstmp3->fields("toIP3");
   $toIP4 = $rstmp3->fields("toIP4");
   $onewIp=$fromIP1.".".$fromIP2.".".$fromIP3.".".$fromIP4;
   $towIp=$toIP1.".".$toIP2.".".$toIP3.".".$toIP4;
if( $onlineip >= $onewIp and $onlineip <=$towIp ){
echo "你无权访问本网页<br>";
exit;
}else{
}
$rstmp3->MoveNext();
}
$rstmp3->Close();
?>

解决方案 »

  1.   

    1、好复杂的数据组织
    2、你示例的数据将会得到正确的结果
    3、一般将ip地址转换成长整型数(通过ip2long函数)保存在表中,检验时只需用sql命令即可,无须附加php的判断逻辑
    ip2long('61.29.61.0') ==> 1025326336
    ip2long('61.29.61.255') ==> 1025326591表
    form       to 
    1025326336 1025326591$ip = ip2long($onlineip); 
    $sql = "select * from 表 where $ip BETWEEN form AND to";当查询结果的记录数大于0时,就表示该ip受限制
      

  2.   

    .htaccess 里面可以设置,这样最简单
      

  3.   

    BETWEEN a AND b
    这个在Mysql4中不知道是否正确
    先试下
    学习之...
      

  4.   

    select * from 表 where $ip BETWEEN form AND to是错误,环境:MySQL 5.0.18-nt + PHP4.4.2 + APACHE2但是select * from 表 where $ip BETWEEN `form` AND `to`就正确不知道是不是Mysql版本的问题
      

  5.   

    select * from 表 where $ip BETWEEN form AND to
    是错误的
    select * from 表 where $ip BETWEEN `form` AND `to`
    才正确不知道是不是环境的原因:WINXP + APACHE2 + PHP4.4.2 + MySQL 5.0.18-nt