2013-04-09 129 views
2

我有一个IP范围数据库,我正在使用下面的代码将范围拆分为单独的IP地址。这工作正常,直到我得到210937记录,然后代码停止激活IP范围,并开始插入0.0.0.0。拆分IP地址范围,IP地址在210937记录后停止

我试过删除一些IP地址,但即使IP地址不同,它仍然停留在同一点。

for ($ip = ip2long($ip1); $ip<=ip2long($ip2); $ip++) 
{ 
$lip = long2ip($ip); 

任何意见,将不胜感激。

好吧,这里是完整的代码减去db连接。

$query1 = "SELECT * FROM masteriplist"; 
    $result = mysql_query($query1); 
    while($row = mysql_fetch_array($result)) 
    { 

    $ipe = $row['ip_end_range']; 
    $ips = $row['ip_start_range']; 

    $ip1 = "$ips"; 
    $ip2 = "$ipe"; 


    for ($ip = ip2long($ip1); $ip<=ip2long($ip2); $ip++) 
    { 
    $lip = long2ip($ip); 


    mysql_query("INSERT INTO ip_master (ip) VALUES ('$lip')") 
    or die(mysql_error()); 

    } 
    } 

OK调试代码返回以下

array(24) { 
    ["id"]=> string(2) "50" 
    ["ip_address"]=> string(12) "85.119.25.27" 
    ["ip_start_range"]=> string(0) "" 
    ["ip_end_range"]=> string(0) "" 
    ... 
} 
+0

@class如果是这样的情况下,止跌之后再插入任何东西。 – 2013-04-09 02:50:23

+0

嗨,我是从一个表开始和结束,每个contanig一个单一的IP地址,代码是这样的IP地址。 $ ipe = $ row ['ip_end_range']; $ ips = $ row ['ip_start_range']; $ ip1 =“$ ips”; $ ip2 =“$ ipe”; – user1691024 2013-04-09 02:50:34

+0

是的,它停止插入后,它进行了成千上万的记录,但只是插入0.0.0.0.0 – user1691024 2013-04-09 02:51:30

回答

0

它看起来就像你正在处理一个单一的IP地址而不是一个范围;处理既可以用这个来完成:

if ($row['ip_start_range'] == '' || $row['ip_end_range'] == '') { 
    $ip1 = $ip2 = $row['ip_address']; 
} else { 
    $ip1 = $row['ip_start_range']; 
    $ip2 = $row['ip_end_range']; 
} 

此外,您可以使其更有效地通过移动环路以外的ip2long电话:

$start = ip2long($ip1); 
$stop = ip2long($ip2); 

for ($ip = $start; $ip <= $stop; $ip++) { 
    // ... 
}