我有一个IP范围数据库,我使用下面的代码将范围拆分为各个IP地址。这工作正常,直到我得到210937记录然后代码停止扫描IP范围并开始插入0.0.0.0。
我尝试删除一些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 :(得分: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++) {
// ...
}