我在尝试“打印”PHP函数以将IP地址范围转换为CIDR格式时遇到问题,这是IP2Location.com发布的函数:
https://www.ip2location.com/tutorials/how-to-convert-ip-address-range-into-cidr
function iprange2cidr($ipStart, $ipEnd){
if (is_string($ipStart) || is_string($ipEnd)){
$start = ip2long($ipStart);
$end = ip2long($ipEnd);
}
else{
$start = $ipStart;
$end = $ipEnd;
}
$result = array();
while($end >= $start){
$maxSize = 32;
while ($maxSize > 0){
$mask = hexdec(iMask($maxSize - 1));
$maskBase = $start & $mask;
if($maskBase != $start) break;
$maxSize--;
}
$x = log($end - $start + 1)/log(2);
$maxDiff = floor(32 - floor($x));
if($maxSize < $maxDiff){
$maxSize = $maxDiff;
}
$ip = long2ip($start);
array_push($result, "$ip/$maxSize");
$start += pow(2, (32-$maxSize));
}
return $result;
}
function iMask($s){
return base_convert((pow(2, 32) - pow(2, (32-$s))), 10, 16);
}
(注意:将'echo'更正为'return'结果)
我已经尝试了将$ ipStart和$ ipEnd值“馈送”到函数中的所有建议方法,以及“回显”或“打印”生成的数组,但我得到的只是“数组” ”
例如,在定义函数后,我尝试:
$ipStart = '8.8.8.8';
$ipEnd = '8.8.8.254';
echo iprange2cidr($ipStart, $ipEnd);
...我为新手问题道歉,我是一个PHP新手。我只是不确定如何使用该功能。任何关于我做错的指导都将不胜感激!我的服务器使用PHP 7.1。谢谢。
答案 0 :(得分:0)
让我们返回$result
。
function iprange2cidr($ipStart, $ipEnd){
....
return $result;
}
然后让我们在它回应之前将其转换为字符串:
$ipStart = '8.8.8.8';
$ipEnd = '8.8.8.254';
$range = iprange2cidr($ipStart, $ipEnd);
echo implode("\n",$range);
答案 1 :(得分:0)
您可以使用print_r($result);
来获取人类可读的输出。
请参阅doc了解详情。
答案 2 :(得分:0)
使用函数的正确方法是返回值
function iprange2cidr($ipStart, $ipEnd){
....
return $result;}
然后调用函数就好了 $ returnedVale = iprange2cidr($ ipStart,$ ipEnd);
$returnedVale = iprange2cidr($ipStart, $ipEnd);
echo"<pre>";print_r($returnedVale);echo"</pre>";