2012年12月29日 星期六

PHP判斷是否為有效IP

php 在 5.2 之後可以使用 filter_var 判斷是否為有效的 IP
filter_var 說明:http://php.net/manual/en/function.filter-var.php

filter_var 可用的 Validate filters:
http://php.net/manual/en/filter.filters.validate.php
  • FILTER_VALIDATE_IP:判斷是否為有效IP

filter_var 可用的 Filter flags:
http://php.net/manual/en/filter.filters.flags.php
  • FILTER_FLAG_IPV4:判斷是否為 IP4
  • FILTER_FLAG_IPV6:判斷是否為 IP6
  • FILTER_FLAG_NO_PRIV_RANGE:遇到私有 IP 時回傳 FALSE。
    IP4 私有IP範圍:10.0.0.0/8, 172.16.0.0/12 and 192.168.0.0/16
    IP6 私有IP範圍:starting with FD or FC
  • FILTER_FLAG_NO_RES_RANGE:遇到保留 IP 時回傳 FALSE。
    IP4 保留 IP 範圍:0.0.0.0/8, 169.254.0.0/16, 192.0.2.0/24 and 224.0.0.0/4
    IP6:This flag does not apply to IPv6 addresses
  • 以上的 Filter flags 須與 FILTER_VALIDATE_IP 一起使用
測試範例:
$ip = '10.0.0.0';
var_dump(filter_var($ip, FILTER_VALIDATE_IP));//得到"10.0.0.0"
var_dump(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE));//得到 false
var_dump(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_RES_RANGE));//得到"10.0.0.0"

$ip = '224.0.0.0';
var_dump(filter_var($ip, FILTER_VALIDATE_IP));//得到"224.0.0.0"
var_dump(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE));//得到"224.0.0.0"
var_dump(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_RES_RANGE));//得到 false
使用範例:
$ip = '8.8.8.8';
if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)){
  //判斷是否為有效的IP4
}

沒有留言:

張貼留言