0

我正在尝试比较一些存储为字符串的 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转换为

这是一个var_dump()用于 IP 并转换为整数的示例:

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

2 回答 2

0

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

$iplong = ip2long(trim($video_net_key['ipaddress']));
于 2016-02-18T18:23:12.903 回答
0

可能是这样的

“因为PHP的整数类型是有符号的,而且很多IP地址在32位架构上会产生负整数,所以需要使用sprintf()或者printf()的“%u”格式化器来获取无符号IP的字符串表示地址。” 来自 ip2long php.net 文章

这应该有效:

echo " --- The ip long conversion is " . sprintf("%u", ip2long($video_net_key['ipaddress'])) . "<br>";
于 2016-02-18T16:19:55.097 回答