2013-04-09 108 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++) { 
    // ... 
}