无法让ip2long()工作

时间:2016-02-18 16:05:54

标签: php ip ip2long

我正在尝试比较一些存储为字符串的IP地址。我读到ip2long()将字符串转换为整数,所以我正在玩它以查看它是否能满足我的需求。所以,最初,我只是想看看转换后的IP是什么样的。我写了下面的代码来看看,但没有任何东西被转换。我不明白我做错了什么。这是代码:

<?php
foreach($form->data[vicondb] as $video_net_key) 
{
    if ($video_net_key['ipaddress'] != null)
    {
        echo "The IP address is " . $video_net_key['ipaddress'];
        $iplong = ip2long($video_net_key['ipaddress']);
        echo " --- The ip long conversion is " . $iplong . "<br>";
    }

} // End foreach($form->data[vicondb] as $video_net_key)

echo "End of both foreach statements<br>";
?>

以下是结果示例:

  

IP地址为172.26.0.10 --- ip long转换为

     

IP地址为172.26.0.31 --- ip long转换为

     

IP地址为172.26.0.32 --- ip long转换为

     

IP地址为172.26.0.33 --- ip long转换为

以下是IP的var_dump()示例并转换为整数:

string(12) "172.26.0.10 "
bool(false)
string(12) "172.26.0.31 "
bool(false)
string(12) "172.26.0.32 "
bool(false) 

2 个答案:

答案 0 :(得分:0)

它可能是类似的东西

“因为PHP的整数类型是有符号的,并且许多IP地址将在32位体系结构上产生负整数,所以需要使用sprintf()或printf()的”%u“格式化程序来获取字符串表示形式未签名的IP地址。“ From ip2long php.net article

这应该有效:

echo " --- The ip long conversion is " . sprintf("%u", ip2long($video_net_key['ipaddress'])) . "<br>";

答案 1 :(得分:0)

您需要修剪IP,因为它似乎有一个尾随空格且无效:

$iplong = ip2long(trim($video_net_key['ipaddress']));