IPV4与IPV6 PHP功能

J J*_*son 3 php ipv4 ipv6

我一直在阅读有关如何确定IP是IPv4还是IPv6的问题,而且我觉得需要注意的是是否存在冒号.但是,您具有IPv4映射的IPv6地址和IPv4兼容的IPv6地址.在我看来,这些类型的地址都有冒号和句点,所以不是寻找::ffff字符串开头是否没有的解决方案,为什么不这样做:

function isIPv6($ip) {
  if(strpos($ip, ":") !== false && strpos($ip, ".") === false) {
     return true;
  }
  return false;
}
Run Code Online (Sandbox Code Playgroud)

编辑:我错过了什么或者这个功能在所有情况下都能正常工作吗?

Are*_*res 5

PHP => 5.2使用filter_var进行"内置"方法

你的功能可能如下所示:

function isIPv6($ip) {

   if(filter_var($ip, FILTER_VALIDATE_IP)) {

       if(filter_var($ip, FILTER_FLAG_IPV6)) {
          //It is IPv6 indeed.
        } else {
          //It is IPv4
       }

   } else {
      // NOT VALID IP
   }

}
Run Code Online (Sandbox Code Playgroud)

  • 问题是"12:29 AM"实际上会返回true.您的评估过于简单化.如果你想实现它自己,那么你应该考虑使用正则表达式. (2认同)
  • 叹了口气...检查此[安全性答案](http://stackoverflow.com/a/2794089/547144).看看第一个项目. (2认同)