[PHP] verify IPv6 and IPv4

剛好最近在找如何判斷給訂的 IP 是不是 IPv6

google 了一下, 在此篇找到: http://www.electrictoolbox.com/php-validate-ip-address-filter-var/

發現 PHP 居然內建自動偵測, 真是不錯, 但其實他是使用 PHP 的 filter_var 來幫忙篩選

詳細官方說明網頁: http://php.net/manual/en/function.filter-var.php

不過要注意要 PHP ver 5.2 以上才支援喔!!

節錄偵測 IPv6 範例如下

function is_ipv6($ip)
{
    if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6))
        return true;
    else 
        return false;
}

理所當然也有偵測 IPv4的

function is_ipv4($ip)
{
    if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4))
        return true;
    else 
        return false;
}

前面的 FILTER_VALIDATE_IP 就是先判定他真的是 IP

那他還有偵測不要是 private ip range 的 flag: FILTER_FLAG_NO_PRIV_RANGE

算是一個偷懶的作法XD

當然偵測是否給定的是 IP, 也可以用 PHP 的 function: ip2long (但只限制IPv4)

ex:

function is_valid_v4($ip)
{
   return sprintf("%u", ip2long($ip));
}

$ip = "192.168.1.1";
echo (is_valid_v4($ip))? "$ip is a valid IPv4\n" : "$ip is an invalid IPv4\n";

$ip = "abc";
echo (is_valid_v4($ip))? "$ip is a valid IPv4\n" : "$ip is an invalid IPv4\n";

留言

這個網誌中的熱門文章

[Linux] Linux下查詢硬體記憶體資訊 Memory Information

[Other] Chrome 重新整理所有開啟頁面

[Python] Simple Socket Server