大家都问了好多次关于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();
?>
条件:
表名: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();
?>
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受限制
这个在Mysql4中不知道是否正确
先试下
学习之...
是错误的
select * from 表 where $ip BETWEEN `form` AND `to`
才正确不知道是不是环境的原因:WINXP + APACHE2 + PHP4.4.2 + MySQL 5.0.18-nt