2013-04-09 2 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()); 

    } 
    } 

ОК код отладки вернулся следующий

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 Если бы это было так, это Wouldn После этого ничего не вставляйте. –

+0

Привет Я принимаю IP-адреса из начала и конца таблицы, каждый из которых содержит один IP-адрес, код такой. $ ipe = $ row ['ip_end_range']; $ ips = $ row ['ip_start_range']; $ ip1 = "$ ips"; $ ip2 = "$ ipe"; – user1691024

+0

Да после того, как он перестает вставлять его, он переносится на тысячи записей, но просто вставляет 0.0.0.0.0 – user1691024

ответ

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++) { 
    // ... 
} 
Смежные вопросы