比如输入的IP是121.204.208.70预设的IP范围存在一个文件里
121.192.0.0 121.199.255.255
121.201.0.0 121.201.255.255
121.204.0.0 121.207.255.255
121.224.0.0 121.239.255.255
121.248.0.0 121.251.255.255我用fgets一次读出一行,现在怎么判断是否在范围内呢。
121.248.0.0 121.251.255.255中间是一个空格。
如上面的例子,当读到第三行的时候,应该判断出是范围内

解决方案 »

  1.   


    //$ip:输入的IP
    //$ip_section:读取的IP段
    function parseIP($ip,$ip_section){
         $ip_arr = split($ip,"\.");
         $ip_part = split($ip_section," ");
         $ipstart = split($ip_part[0],"\.");
         $ipend = split($ip_part[1],"\.");
         for($i=0;$i<4;$i++){
             if($ip_arr[$i]<$ipstart[$i]||$ip_arr[$i]>$ipend[$i])
                 return false;
         }
         return true;
    }
      

  2.   

    把IP组成一个long 型数  12120400<IP<121207255255 
    这个虽然笨,还是可以的
      

  3.   

    你说的范围是什么,有个具体的定义吗?
    事实上
    121.204.208.70 也在
    121.192.0.0 121.199.255.255 范围内3楼的split的两个参数ms写反了。另外3楼的其实也是上边我说的这个问题。
    print parseIP('111.111.111.111', '11.11.11.11 120.120.120.120');会返回真。如果这正是楼主所要的话 我觉得还不如用ip2longif(ip2long($ip) >= ip2long($start) && ip2long($ip) <= ip2long($end)) {如果楼主想限定ip的前两位相同,则需要explode 比较前两位相同,后两位> 和<限定的ip即可