PHP 檢查IP地址 合法性 ipaddr int string 轉換
阿新 • • 發佈:2018-12-18
* ip.php
<?php function check_ip_validity($ip) { $pat = '/\d{1,3}\.\d{1,3}\.\d{1,3}+\.\d{1,3}/'; $r = preg_match( $pat, $ip ); if (empty($r)) { return false; } $b = explode('.', $ip); $a = array_map(function($it) { $len = strlen($it); $code = 0; for ($i = 0; $i < $len; $i++) { $code = 10 * $code + ord($it[$i]) - 48; } return $code; }, $b); $every = function(array $a, callable $f) { for ($i = 0, $n = count($a); $i < $n; $i++) { if (! $f($a[$i], $i) ) { return false; } } return true; }; return $every($a, function($it) { return (0 <= $it && $it <= 255); }); } function ip2int(string $ip) : int { $b = explode('.', $ip); $a = array_map(function($it) { $len = strlen($it); $code = 0; for ($i = 0; $i < $len; $i++) { $code = 10 * $code + ord($it[$i]) - 48; } return $code; }, $b); $reduce = function(array $a, callable $c, $ini = 0) { $acc = $ini; for ($i = 0, $n = count($a); $i < $n; $i++) { $acc = $c($acc, $a[$i], $i); } return $acc; }; return $reduce($a, function($acc, $item, $index) { $acc |= $item << (3-$index)*8; return $acc; }, 0); } function int2ip(int $bytes) : string { $bytes &= 0xffffffff; $a = $bytes >> 24; $b = $bytes >> 16 & 0x00ff; $c = $bytes >> 8 & 0x0000ff; $d = $bytes & 0x000000ff; return sprintf("%d.%d.%d.%d", $a, $b, $c, $d); }
* test:
var_dump(check_ip_validity('192.168.4.157'));
var_dump(check_ip_validity('3232236712'));
$ipi = ip2int('47.96.133.100');
echo $ipi.PHP_EOL;
$ips = int2ip($ipi);
echo $ips.PHP_EOL;
* run:
$ php ip.php
bool(true)
bool(false)
794854756
47.96.133.100