php限制IP和IP段的代码
php限制IP段代码是我在网上搜相关解决方法时搜到的,这个类的makePregIP函数逻辑有点问题,我修改了下可以使用了,这个类得功能是允许白名单中的IP地址访问,如果要实现限制黑名单中的IP地址访问,简单修改下checkIP函数中的代码逻辑就可以了.
使用方法,代码如下:
$allow_ip = array ( "192.168.1.1" , "210.10.2.1-20" , "222.34.4.*" , "127.0.0.1" ); $oBlock_ip = new allowIp( $allow_ip ); if ( ! $oBlock_ip ->checkIP() ){ echo '您的IP为:' ; echo $oBlock_ip ->ip; exit ( '禁止访问' ); }allowIP类文件,代码如下:
class allowIp { function __construct( $allow_ip ){ if ( empty empty ( $allow_ip )) { return false; } $this ->allow_ip = $allow_ip ; $this ->ip = '' ; } private function makePregIP( $str ) { if ( strstr ( $str , "-" )) { $aIP = explode ( "." , $str ); foreach ( $aIP as $k => $v ) { if (! strstr ( $v , "-" )) { $preg_limit .= $this ->makePregIP( $v ); $preg_limit .= "." ; } else { $aipNum = explode ( "-" , $v ); for ( $i = $aipNum [0]; $i <= $aipNum [1]; $i ++){ $preg .= $preg ? "|" . $i : "[" . $i ; } $preg_limit .= strrpos ( $preg_limit , "." ,1)==( strlen ( $preg_limit )-1)? $preg . "]" : "." . $preg . "]" ; } } } else { $preg_limit = $str ; } return $preg_limit ; } private function getAllBlockIP(){ if ( $this ->allow_ip) { $i = 1; foreach ( $this ->allow_ip as $k => $v ) { $ipaddres = $this ->makePregIP( $v ); $ip = str_ireplace ( "." , "." , $ipaddres ); $ip = str_replace ( "*" , "[0-9]{1,3}" , $ip ); $ipaddres = "/" . $ip . "/" ; $ip_list [] = $ipaddres ; $i ++; } } return $ip_list ; } public function checkIP() { $iptable = $this ->getAllBlockIP(); $IsJoined = false; //取得用户ip $Ip = $this ->get_client_ip(); $Ip = trim( $Ip ); //在白名单中 if ( $iptable ) { foreach ( $iptable as $value ) { if (preg_match( "{$value}" , $Ip )) { $IsJoined = true; break ; } } } //不在白名单中 if ( ! $IsJoined ){ return false; } return true; } private function get_client_ip(){ if ( getenv ( "HTTP_CLIENT_IP" ) && strcasecmp ( getenv ( "HTTP_CLIENT_IP" ), "unknown" )) $ip = getenv ( "HTTP_CLIENT_IP" ); else if ( getenv ( "HTTP_X_FORWARDED_FOR" ) && strcasecmp ( getenv ( "HTTP_X_FORWARDED_FOR" ), "unknown" )) $ip = getenv ( "HTTP_X_FORWARDED_FOR" ); else if ( getenv ( "REMOTE_ADDR" ) && strcasecmp ( getenv ( "REMOTE_ADDR" ), "unknown" )) $ip = getenv ( "REMOTE_ADDR" ); else if (isset( $_SERVER [ 'REMOTE_ADDR' ]) && $_SERVER [ 'REMOTE_ADDR' ] && strcasecmp ( $_SERVER [ 'REMOTE_ADDR' ], "unknown" )) $ip = $_SERVER [ 'REMOTE_ADDR' ]; else $ip = "unknown" ; $this ->ip = $ip ; return ( $ip ); } }查看更多关于php限制IP和IP段的代码 - php高级应用的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did30169