찾다
백엔드 개발PHP 튜토리얼Discuz 50에서 Innocence IP 데이터베이스 읽기 기능 분석

Discuz 5.0은 더 이상 자체 IP 데이터를 사용하지 않고 Innocence IP의 데이터 형식을 사용합니다. Innocence IP 데이터베이스에 액세스하는 것은 약간 번거롭습니다. 특정 형식 분석은 다음 두 링크를 참조하십시오. 다른 언어로 구현 기사 마지막에 있는 링크를 참조하세요.
"무죄 IP 데이터베이스 형식에 대한 자세한 설명"
링크 1: http://blog.csdn.net/heiyeshuwu/archive/2006/05/12/725675.aspx
링크 2: http:/ /lumaqq .linuxsir.org/article/qqwry_format_detail.html
무고한 IP 데이터베이스 공식 웹사이트: http://www.cz88.net/ip/
무고한 IP 데이터베이스 다운로드: http://update.cz88.net /soft/ qqwry.rar
Disuz!5_GBK/upload/include/misc.func.php 경로에 다음 함수 conrvertip()가 있으니 관심 있으신 분들은 자세히 읽어보시고 분석해 보시면 됩니다.(아래 코드는 읽기 쉽게 간단하게 수정했으며, 핵심은 수정하지 않았습니다)
//============= ======== ==============
//
// 기능: IP 주소가 실제 주소를 가져오는 기능
// 매개변수: $ip - IP 주소
// 작성자 :[Discuz!] (C) Comsenz Inc.
//
//===================== =========== ======
function Convertip($ip) {
//IP 데이터 파일 경로
$dat_path = 'QQWry.Dat'
//IP 주소 확인
if( !preg_match("/^d{1,3}.d{1,3}.d{1,3}.d{1,3}$/", $ip )) {
return 'IP 주소 오류';
}
//IP 데이터 파일 열기
if(!$fd = @fopen($dat_path, 'rb')){
return 'IP 날짜 파일이 없거나 접근이 거부되었습니다' ;
}
//작업을 위해 IP를 분해하고 정수를 얻습니다.
$ip =explore('.', $ip); ipNum = $ip[0] * 16777216 $ip [1] * 65536 $ip[2] * 256 $ip[3]
//IP 데이터 인덱스의 시작 및 끝 위치 가져오기
$DataBegin = fread($fd, 4);
$DataEnd = fread($fd, 4);
$ipbegin = implode('', unpack('L', $DataBegin))
if($ ipbegin $ipend = implode('', unpack('L', $DataEnd))
if($ipend $ipAllNum = ($ipend - $ipbegin) / 7 1;
$BeginNum = 0
$EndNum = $ipAllNum; 인덱스 레코드에서 일치하는 IP 레코드를 검색하는 방법
while($ip1num>$ipNum || $ip2num $Middle= intval(($EndNum $BeginNum) / 2); //인덱스 위치로 포인터를 오프셋하고 4단어를 읽습니다. 섹션
fseek($fd, $ipbegin 7 * $Middle)
$ipData1 = fread($fd, 4)
if(strlen ($ipData1) fclose ($fd);
return 'System Error';
}
//추출된 데이터는 긴 정수로 변환됩니다. 음수인 경우 32제곱에 2를 더합니다.
$ip1num = implode ('', unpack('L', $ipData1))
if($ip1num //추출된 긴 정수가 우리 IP보다 큽니다. 다음 주기를 위해 주소가 수정됩니다.
if($ip1num > $ipNum) {
$EndNum = $Middle
continue;
}
//이전 인덱스를 마친 후 다음 인덱스를 제거합니다.
$DataSeek = fread($fd, 3)
if(strlen($DataSeek) fclose($fd);
return '시스템 오류';
}
$DataSeek = implode('', unpack('L', $DataSeek.chr(0))) 🎜> fseek($fd, $DataSeek);
$ipData2 = fread($fd, 4)
if(strlen($ipData2) fclose($fd); 🎜> '시스템 오류'를 반환합니다.
}
$ip2num = implode('', unpack('L', $ipData2));
if($ip2num //찾을 수 없음 프롬프트 알 수 없음
if($ip2num if($Middle == $BeginNum) {
'; > if($ipFlag == chr(1)) {
$ipSeek = fread($fd, 3)
if(strlen($ipSeek) fclose ($fd); ;
'시스템 오류' 반환
}
$ipSeek = implode('', unpack('L', $ipSeek.chr(0)))
fseek( $fd, $ ipSeek);
$ipFlag = fread($fd, 1);
}
if($ipFlag == chr(2)) {
$AddrSeek = fread($fd , 3);
if(strlen($AddrSeek) fclose($fd);
return '시스템 오류'; fread($ fd, 1)
if($ipFlag == chr(2)) {
$AddrSeek2 = fread($fd, 3);
if(strlen($AddrSeek2) } else {
fseek($fd, -1, SEEK_CUR)
}
while(($char = fread ($fd, 1) ) ! = chr(0))
$ipAddr2 .= $char;
$AddrSeek = implode('', unpack('L', $AddrSeek.chr(0)))
fseek( $fd , $AddrSeek);
while(($char = fread($fd, 1)) != chr(0))
$ipAddr1 .= $char
}else {
fseek($fd, -1, SEEK_CUR);
while(($char = fread($fd, 1)) != chr(0))
$ipAddr1 .= $char;
$ipFlag = fread($fd, 1);
if($ipFlag == chr(2)) {
$AddrSeek2 = fread($fd, 3)
if(strlen( $AddrSeek2)                                                                       '', unpack('L', $AddrSeek2. chr(0))));
                                          while(($ char = fread($fd, 1)) != chr (0)){
$ipAddr2 .= $char;
}
}
fclose($fd)
// 마지막으로 해당 교체 작업을 수행하고 결과를 반환합니다
if(preg_match('/http/i', $ipAddr2)) {
$ipAddr2 = '';
}
$ipaddr = "$ipAddr1 $ipAddr2"
$ipaddr = preg_replace ('/CZ88.NET/is', '', $ipaddr)
$ipaddr = preg_replace('/^s*/is', '', $ipaddr )
$ipaddr = preg_replace(' /s*$/is', '', $ipaddr)
if(preg_match('/http/i', $ipaddr) || $ipaddr == ' ') {
$ipaddr = '알 수 없음 ';
}
$ipaddr 반환
}
//=============== =======
//
// 호출 예시(매우 빠름)
//
//================ ========
echo Convertip('219.238.235.10');
//출력: Beijing Telecom
echo Convertip('23.56.82.12')
// 출력: IANA
echo Convertip('250.69.52.0 ');
//출력: IANA 예약된 주소
echo Convertip('238.69.52.0')
//출력: IANA 예약된 주소 멀티캐스트 전송에 사용
echo Convertip('192.168.0.1) ');
//출력: LAN 상대방이 귀하와 동일한 인트라넷에 있습니다.
echo Convertip('255.255.255.255')
// 출력: 2006년 11월 20일의 Innocence Network IP 데이터
?>

이상은 무고한 IP 데이터베이스의 내용을 포함하여 Discuz 50의 무고한 IP 데이터베이스를 읽는 기능에 대한 분석을 소개했습니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되길 바랍니다.


성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
PHP와 Python : 다른 패러다임이 설명되었습니다PHP와 Python : 다른 패러다임이 설명되었습니다Apr 18, 2025 am 12:26 AM

PHP는 주로 절차 적 프로그래밍이지만 객체 지향 프로그래밍 (OOP)도 지원합니다. Python은 OOP, 기능 및 절차 프로그래밍을 포함한 다양한 패러다임을 지원합니다. PHP는 웹 개발에 적합하며 Python은 데이터 분석 및 기계 학습과 같은 다양한 응용 프로그램에 적합합니다.

PHP와 Python : 그들의 역사에 깊은 다이빙PHP와 Python : 그들의 역사에 깊은 다이빙Apr 18, 2025 am 12:25 AM

PHP는 1994 년에 시작되었으며 Rasmuslerdorf에 의해 개발되었습니다. 원래 웹 사이트 방문자를 추적하는 데 사용되었으며 점차 서버 측 스크립팅 언어로 진화했으며 웹 개발에 널리 사용되었습니다. Python은 1980 년대 후반 Guidovan Rossum에 의해 개발되었으며 1991 년에 처음 출시되었습니다. 코드 가독성과 단순성을 강조하며 과학 컴퓨팅, 데이터 분석 및 기타 분야에 적합합니다.

PHP와 Python 중에서 선택 : 가이드PHP와 Python 중에서 선택 : 가이드Apr 18, 2025 am 12:24 AM

PHP는 웹 개발 및 빠른 프로토 타이핑에 적합하며 Python은 데이터 과학 및 기계 학습에 적합합니다. 1.PHP는 간단한 구문과 함께 동적 웹 개발에 사용되며 빠른 개발에 적합합니다. 2. Python은 간결한 구문을 가지고 있으며 여러 분야에 적합하며 강력한 라이브러리 생태계가 있습니다.

PHP 및 프레임 워크 : 언어 현대화PHP 및 프레임 워크 : 언어 현대화Apr 18, 2025 am 12:14 AM

PHP는 현대화 프로세스에서 많은 웹 사이트 및 응용 프로그램을 지원하고 프레임 워크를 통해 개발 요구에 적응하기 때문에 여전히 중요합니다. 1.PHP7은 성능을 향상시키고 새로운 기능을 소개합니다. 2. Laravel, Symfony 및 Codeigniter와 같은 현대 프레임 워크는 개발을 단순화하고 코드 품질을 향상시킵니다. 3. 성능 최적화 및 모범 사례는 응용 프로그램 효율성을 더욱 향상시킵니다.

PHP의 영향 : 웹 개발 및 그 이상PHP의 영향 : 웹 개발 및 그 이상Apr 18, 2025 am 12:10 AM

phphassignificallyimpactedwebdevelopmentandextendsbeyondit

스칼라 유형, 반환 유형, 노조 유형 및 무효 유형을 포함한 PHP 유형의 힌트 작업은 어떻게 작동합니까?스칼라 유형, 반환 유형, 노조 유형 및 무효 유형을 포함한 PHP 유형의 힌트 작업은 어떻게 작동합니까?Apr 17, 2025 am 12:25 AM

PHP 유형은 코드 품질과 가독성을 향상시키기위한 프롬프트입니다. 1) 스칼라 유형 팁 : PHP7.0이므로 int, float 등과 같은 기능 매개 변수에 기본 데이터 유형을 지정할 수 있습니다. 2) 반환 유형 프롬프트 : 기능 반환 값 유형의 일관성을 확인하십시오. 3) Union 유형 프롬프트 : PHP8.0이므로 기능 매개 변수 또는 반환 값에 여러 유형을 지정할 수 있습니다. 4) Nullable 유형 프롬프트 : NULL 값을 포함하고 널 값을 반환 할 수있는 기능을 포함 할 수 있습니다.

PHP는 객체 클로닝 (클론 키워드) 및 __clone 마법 방법을 어떻게 처리합니까?PHP는 객체 클로닝 (클론 키워드) 및 __clone 마법 방법을 어떻게 처리합니까?Apr 17, 2025 am 12:24 AM

PHP에서는 클론 키워드를 사용하여 객체 사본을 만들고 \ _ \ _ Clone Magic 메소드를 통해 클로닝 동작을 사용자 정의하십시오. 1. 복제 키워드를 사용하여 얕은 사본을 만들어 객체의 속성을 복제하지만 객체의 속성은 아닙니다. 2. \ _ \ _ 클론 방법은 얕은 복사 문제를 피하기 위해 중첩 된 물체를 깊이 복사 할 수 있습니다. 3. 복제의 순환 참조 및 성능 문제를 피하고 클로닝 작업을 최적화하여 효율성을 향상시키기 위해주의를 기울이십시오.

PHP vs. Python : 사용 사례 및 응용 프로그램PHP vs. Python : 사용 사례 및 응용 프로그램Apr 17, 2025 am 12:23 AM

PHP는 웹 개발 및 컨텐츠 관리 시스템에 적합하며 Python은 데이터 과학, 기계 학습 및 자동화 스크립트에 적합합니다. 1.PHP는 빠르고 확장 가능한 웹 사이트 및 응용 프로그램을 구축하는 데 잘 작동하며 WordPress와 같은 CMS에서 일반적으로 사용됩니다. 2. Python은 Numpy 및 Tensorflow와 같은 풍부한 라이브러리를 통해 데이터 과학 및 기계 학습 분야에서 뛰어난 공연을했습니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구