เดิมทีมีการเขียนฟังก์ชันหลายอย่าง และบัญชีดำ IP ได้ถูกบันทึกไว้ในไลบรารี เพื่อความสะดวกในการทำความเข้าใจ จึงได้เปลี่ยนเป็นคลาสสำหรับเขียนบัญชีดำ IP
192.168.1.1 IP เดียว
192.168.1.* พร็อกซีนี้ 192.168.1.1-192.168.1-255
192.158.1.2-20 หมายถึง 192.158.1.2-192.158.1.20
คุณยังสามารถเขียน 192.168.1.[1|2|3]
อิอิ~ ไม่รู้ว่าไอเดียจะละเอียดหรือเปล่า เลยเอามาอภิปรายและใช้คำพูดดังนี้ครับ
$oBlock_ip = ใหม่ block_ip();
$oBlock_ip->ตรวจสอบIP();
ต่อไปนี้เป็นส่วนที่ยกมา:
<?php
คลาส block_ip {
var $Block_ip = array("192.168.1.1", "210.10.2.1-20", "222.34.4.*");
ฟังก์ชั่น __ สร้าง () {
-
ฟังก์ชั่น __ ทำลาย () {
-
ฟังก์ชั่นส่วนตัว makePregIP($str){
ถ้า (strstr($str,"-")) {
$aIP = explode(".",$str);
foreach ($aIP เป็น $k=>$v) {
ถ้า (!strstr($v,"-")) {
$preg_limit .= makePregIP($v);
} อื่น{
$aipNum = explode("-",$v);
สำหรับ($i=$aipNum[0];$i<=$aipNum[1];$i++){
$preg .=$preg?"|".$i:"[".$i;
-
$preg_limit .=strrpos($preg_limit,".",1)==(strlen($preg_limit)-1)?$preg"]:".".$preg"]";
-
-
}อื่น{
$preg_limit .= $str"";
-
กลับ $preg_limit;
-
ฟังก์ชั่นส่วนตัว getAllBlockIP(){
ถ้า ($ นี้ -> Block_ip) {
foreach ($this->Block_ip เป็น $k=>$v) {
$ipaddres = $this->makePregIP($v->start_ip);
$ip = str_ireplace(".",".",$ipaddres);
$ip = str_replace("*","[0-9]{1,3}",$ip);
$ipaddres = "/".$ip."/";
$ip_list[] = $ipaddres;
-
-
ส่งคืน $ip_list;
-
ฟังก์ชั่นสาธารณะ checkIP() {
$iptable = $this->getAllBlockIP();
$IsJoined = จริง;
//รับไอพีผู้ใช้
$Ip = $this->get_client_ip();
$Ip = ตัดแต่ง($Ip);
//ลบกลุ่ม IP ออกจากบัญชีดำ
ถ้า ($iptable) {
foreach($iptable เป็น $value) {
ถ้า (preg_match("{$value}",$Ip)) {
$IsJoined = เท็จ;
หยุดพัก;
-
-
-
//หากอยู่ในบัญชีดำ IP ให้ดำเนินการต่อไปนี้
ถ้า( !$เข้าร่วมแล้ว ){
echo "ข้อผิดพลาด IP";
ออก;
-
-
ฟังก์ชั่นส่วนตัว get_client_ip(){
ถ้า (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "ไม่ทราบ")
$ip = getenv("HTTP_CLIENT_IP");
อย่างอื่นถ้า (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "ไม่ทราบ")
$ip = getenv("HTTP_X_FORWARDED_FOR");
อย่างอื่นถ้า (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "ไม่ทราบ")
$ip = getenv("REMOTE_ADDR");
อื่นถ้า (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "ไม่ทราบ"))
$ip = $_SERVER['REMOTE_ADDR'];
อื่น
$ip = "ไม่ทราบ";
กลับ($ip);
-
-
-