我可以在没有字符串黑客的情况下将IP4 / 6地址标准化为PHP中的IP6吗?

时间:2016-04-05 20:30:16

标签: php ip ipv6

这里和其他地方有很多关于PHP中how to handle IP4 and IP6地址的帖子。

我想编写代码,将所有IP地址(无论其表示形式)规范化为IP6格式。

我可以通过将各种建议拼凑在一起并进行一些字符串黑客攻击来实现这一点,但是否已从中继续进行最佳实践?

现代PHP中是否有内置函数可以在所有情况下正确执行此操作,我的应用程序代码中没有任何条件逻辑

1 个答案:

答案 0 :(得分:2)

不,没有任何条件逻辑,你不能这样做。另一方面,必要的代码并不是很困难:

var Date = (function() {
  var OldDate = Date;
  return function (){
    return new OldDate(2012,0,20);
  }
}());

alert(new Date());

你可以这样测试:

function normalise_ip($address, $force_ipv6=false) {
    # Parse textual representation
    $binary = inet_pton($address);
    if ($binary === false) {
        return false;
    }

    # Convert back to a normalised string
    $normalised = inet_ntop($binary);

    # Add IPv4-Mapped IPv6 Address prefix if requested
    if ($force_ipv6 && strlen($binary) == 4) {
        $normalised = '::ffff:' . $normalised;
    }

    return $normalised;
}

如果将结果强制为IPv6,则会获得IPv4映射的IPv6地址,而不是IPv4地址。