【问题标题】:PHP Generate IP RangesPHP 生成 IP 范围
【发布时间】:2012-08-28 22:27:02
【问题描述】:

如你所知,range() 函数可以得到一个数字和另一个之间的范围,

如何对 IP 做同样的事情
比如……

$range_one = "1.1.1.1";
$range_two = "1.1.3.5";
print_r( range($range_one, $range_two) ); 

 /* I want a result of :
     1.1.1.1
     1.1.2.2
     1.1.3.3
     1.1.3.4
     1.1.3.5
 */

我正在考虑使用explode()函数来分解“.”并将每个数字分开,然后将它们中的每一个使用范围,然后将它们组合在一起,这对我来说似乎有点复杂,我想有一个更简单的方法去做吧

【问题讨论】:

    标签: php function loops range explode


    【解决方案1】:

    您可以使用ip2long 将IP 地址转换为整数。这是一个适用于旧 IPv4 地址的函数:

    /* Generate a list of all IP addresses
       between $start and $end (inclusive). */
    function ip_range($start, $end) {
      $start = ip2long($start);
      $end = ip2long($end);
      return array_map('long2ip', range($start, $end) );
    }
    
    $range_one = "1.1.1.1";
    $range_two = "1.1.3.5";
    print_r( ip_range($range_one, $range_two) );
    

    【讨论】:

    • 完美!!帮了我很多!谢谢!
    【解决方案2】:

    这个怎么样:

    $range_one = "1.1.1.1";
    $range_two = "1.1.3.5";
    $ip1 = ip2long ($range_one);
    $ip2 = ip2long ($range_two);
    while ($ip1 <= $ip2) {
        print_r (long2ip($ip1) . "\n");
        $ip1 ++;
    
    }
    

    更新:

    顺便说一句,您的预期输出并不完全是一个范围。例如,1.1.1.1 之后的下一个 IP 是 1.1.1.2 而不是 1.1.2.2

    【讨论】:

    • 你必须自己查看结果,它最终会得到无穷大的结果,而不是像我提到的那样......它忽略了给定的第二个范围
    • 查看答案的更新,它不是无限的。您的预期输出缺少该范围内的多个 IP 地址。
    【解决方案3】:

    你可以使用inet_ntop,inet_ pton http://www.php.net/manual/en/function.inet-ntop.php

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-27
      • 1970-01-01
      • 1970-01-01
      • 2011-08-21
      • 2011-01-17
      • 1970-01-01
      • 1970-01-01
      • 2018-01-04
      相关资源
      最近更新 更多