ale*_*xis 4 php ip-address range
我知道我可以通过转换IP地址到十进制表示首先使用PHP内置的功能,如轻松地做到这一点up2long和long2ip.我只是希望能够使用标准IP地址表示法作为练习.
我想的问题是这样的:给定一个起始IP地址,比如说192.168.1.100,结束IP地址,比如说201.130.22.10.使程序打印该范围内的所有地址编号(192.168.1.100,192.168.1.101,...,201.130.22.9,201.130.22.10).
我想也许要走的路可能是for在一个while条件内建立一个嵌套循环,直到起始地址的第一个八位字节与结束地址的第一个八位字节匹配.然后为第二个八位字节执行相同的代码块,依此类推,直到程序到达结束地址并完成.
我刚刚开始学习编程,所以很有可能我的思考和编写代码远非优雅.如果你是这样的话,你会怎么做?
像这样的东西:
<?php
// works only for valid range
$start_ip = '10.0.0.1';
$end_ip = '10.0.20.1';
$start_arr = explode('.',$start_ip);
$end_arr = explode('.',$end_ip);
while($start_arr <= $end_arr)
{
echo implode('.',$start_arr) . '<br>';
$start_arr[3]++;
if($start_arr[3] == 256)
{
$start_arr[3] = 0;
$start_arr[2]++;
if($start_arr[2] == 256)
{
$start_arr[2] = 0;
$start_arr[1]++;
if($start_arr[1] == 256)
{
$start_arr[1] = 0;
$start_arr[0]++;
}
}
}
}
?>
Run Code Online (Sandbox Code Playgroud)
小智 5
这要简单得多:
<?php
// works only for valid range
$start_ip = ip2long('10.0.0.1');
$end_ip = ip2long('10.0.20.1');
while($start_ip <= $end_ip){
echo long2ip($start_ip).'<br>';
$start_ip++;
}
?>
Run Code Online (Sandbox Code Playgroud)