Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何改进PHP的IP生成器功能_Php_Random_Ip - Fatal编程技术网

如何改进PHP的IP生成器功能

如何改进PHP的IP生成器功能,php,random,ip,Php,Random,Ip,我正在尝试使用PHP生成随机的公共IP地址。我将感谢您对我所做的如下功能的反馈。您认为它的编码方式有哪些方面可以改进?可以用更少的代码行完成吗?有没有我没有预订的号码?我应该使用mt_rand而不是rand吗?感谢所有反馈。谢谢 function generateIP() { $q1 = rand(3,253); //stop the first quadrant being one from a resrved range while ($q1 == '10'|| $

我正在尝试使用PHP生成随机的公共IP地址。我将感谢您对我所做的如下功能的反馈。您认为它的编码方式有哪些方面可以改进?可以用更少的代码行完成吗?有没有我没有预订的号码?我应该使用mt_rand而不是rand吗?感谢所有反馈。谢谢

function generateIP() {
    $q1 = rand(3,253);

    //stop the first quadrant being one from a resrved range
    while ($q1 == '10'|| $q1 == '100'|| $q1 == '127' || $q1 == '169' || $q1 == '172' || $q1 == '192' || $q1 == '198' || $q1 == '203' || $q1 == '224' || $q1 == '240') {
        $q1 = rand(3,253);
    }

    $q2 = rand(0,255);
    $q3 = rand(0,255);
    $q4 = rand(0,255);
    $ip = $q1.'.'.$q2.'.'.$q3.'.'.$q4;
    return $ip;
}
这个怎么样

function generateIP() {
$q1 = 0;
do
{
    $q1 = rand(1,255);

}
while($q1 != '0'|| $q1 != '10'|| $q1 != '100'|| $q1 != '127' || $q1 != '169' || $q1 != '172' || $q1 != '192' || $q1 != '198' || $q1 != '203' || $q1 != '224' || $q1 != '240'){

    $q2 = rand(0,255);
    $q3 = rand(0,255);
    $q4 = rand(0,255);
    $ip = $q1.'.'.$q2.'.'.$q3.'.'.$q4;
    return $ip;
};
在范围内生成IP

public static function generateRandomIp($start, $end) {
    if (strcmp($start, $end) > 0) {
        return false;
    }

    $arrStart = explode('.',$start);
    $arrEnd = explode('.', $end);

    // First
    $arrIp[0] = rand($arrStart[0], $arrEnd[0]);

    // Second
    if ($arrIp[0] == $arrStart[0] && $arrIp[0] == $arrEnd[0]) {
        $arrIp[1] = rand($arrStart[1], $arrEnd[1]);
    } elseif ($arrIp[0] == $arrStart[0]) {
        $arrIp[1] = rand($arrStart[1], 255);
    } elseif ($arrIp[0] == $arrEnd[0]) {
        $arrIp[1] = rand(0, $arrEnd[1]);
    } else {
        $arrIp[1] = rand(0, 255);
    }

    // Third
    if ($arrIp[1] == $arrStart[1] && $arrIp[1] == $arrEnd[1]) {
        $arrIp[2] = rand($arrStart[2], $arrEnd[2]);
    } elseif ($arrIp[1] == $arrStart[1]) {
        $arrIp[2] = rand($arrStart[2], 255);
    } elseif ($arrIp[1] == $arrEnd[1]) {
        $arrIp[2] = rand(0, $arrEnd[2]);
    } else {
        $arrIp[2] = rand(0, 255);
    }

    // Fourth
    if ($arrIp[2] == $arrStart[2] && $arrIp[02] == $arrEnd[2]) {
        $arrIp[3] = rand($arrStart[3], $arrEnd[3]);
    } elseif ($arrIp[2] == $arrStart[2]) {
        $arrIp[3] = rand($arrStart[3], 255);
    } elseif ($arrIp[2] == $arrEnd[2]) {
        $arrIp[3] = rand(0, $arrEnd[3]);
    } else {
        $arrIp[3] = rand(0, 255);
    }

    return implode(".", $arrIp);
}

为什么要创建ip生成器?看看这个,我想知道为什么不创建1.0.0.0/8和2.0.0.0/8网络,为什么要创建以前称为D类和E类的网络。它们仍然没有被使用,而且永远不会被使用。此外,专用网络是10.0.0.0/8 ok、172.16.0.0/12和192.168.0.0/16,您排除的太多了。您可以在使用时使用!在数组$q1、数组10100127中,…您需要知道何时使用Do While或While。。。do while循环中的主要区别。。。是在循环之前执行语句。。。你可以安全地消耗能量;在while语句的结尾,但在其他方面看起来不错:如果你不允许$q1是无效值以外的任何值(不是完全无效,但在这种特殊情况下无效),除了缺少分号,它怎么能正常工作呢?当我看到这个问题时,我很快就忘记了它,当时没有测试它,只是想在修复两个问题的同时演示do。这显然在多个方面被打破;它在语法上是无效的,即使您修改了语法,while语句中的条件也始终为true。
sprintf("%s.%s.%s.%s",
    rand(0,255),
    rand(0,255),
    rand(0,255),
    rand(0,255)         
);