PHPでのIPアドレスのチェックまたはフィルタリングの実現コード
構成ファイルを追加して、禁止すべきIPアドレスを一定の規則で構成ファイルに追加してもいいです。プログラム初期化の際に、プロファイルのルールを読み取り、本明細書で提供する方法で、現在アクセスしているゲスト端末IPアドレスがこれらのルールに存在するかどうかを確認します。存在する場合、サービスの提供を拒否します。
<?php
/**
* PHP IP
*
* IP 、CIDR(Classless Inter-Domain Routing) IP
* :http://www.CodeBit.cn
* :
* - {@link http://us2.php.net/manual/zh/function.ip2long.php#70055}
* - {@link http://us2.php.net/manual/zh/function.ip2long.php#82397}
*
* @param string $network , IP 、CIDR IP
* @param string $ip IP
* @return boolean
*/
function netMatch($network, $ip) {
$network = trim($network);
$ip = trim($ip);
$result = false;
// IP range : 174.129.0.0 - 174.129.255.255
if (false !== ($pos = strpos($network, "-"))) {
$from = ip2long(trim(substr($network, 0, $pos)));
$to = ip2long(trim(substr($network, $pos+1)));
$ip = ip2long($ip);
$result = ($ip >= $from and $ip <= $to);
// CIDR : 174.129.0.0/16
} else if (false !== strpos($network,"/")) {
list ($net, $mask) = explode ('/', $network);
$result = (ip2long($ip) & ~((1 << (32 - $mask)) - 1)) == ip2long($net);
// single IP
} else {
$result = $network === $ip;
}
return $result;
}
// 174.129.0.0 - 174.129.255.255
var_dump(netMatch(' 174.129.0.0 - 174.129.255.255 ', '174.129.1.31')); // True
var_dump(netMatch(' 174.129.0.0/16 ', '174.139.1.31')); // False
var_dump(netMatch(' 174.129.1.32 ', '174.129.1.31')); // False
?>
は、中国ではほとんどが動的IPアドレスを使用しているので、IPアドレスの制限を通じてアクセスが制限されています。使用する時は慎重にしなければなりませんが、緊急時の制限訪問にとっては、非常に有用です。