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