> 백엔드 개발 > PHP 튜토리얼 > php IP Get City API (무고한 IP 데이터베이스)

php IP Get City API (무고한 IP 데이터베이스)

WBOY
풀어 주다: 2016-07-25 08:55:58
원래의
1826명이 탐색했습니다.
  1. /**
  2. * IP 주소를 기반으로 도시 이름 획득 Innocence IP 데이터베이스
  3. * 편집: bbs.it-home.org
  4. */
  5. function Convertip($ip) {
  6. //IP 데이터 파일 경로
  7. $dat_path = 'QQWry.Dat';
  8. //IP 주소 확인
  9. if(!filter_var($ip, FILTER_VALIDATE_IP)) {
  10. return 'IP 주소 오류';
  11. }
  12. //IP 데이터 파일 열기
  13. if(!$fd = @fopen($dat_path, 'rb')){
  14. return 'IP 날짜 파일이 없거나 액세스가 거부됨';
  15. }
  16. //연산할 IP를 분해하여 정수값을 구한다
  17. $ipNum = ip2long($ip);
  18. //IP 데이터 인덱스의 시작과 끝 위치를 구한다
  19. $DataBegin = fread($fd, 4);
  20. $DataEnd = fread($fd, 4);
  21. $ipbegin = implode('', unpack('L', $DataBegin));
  22. if( $ipbegin < 0) $ipbegin = pow(2, 32);
  23. $ipend = implode('', unpack('L', $DataEnd));
  24. if($ipend < ; 0) $ ipend = pow(2, 32); $ipAllNum = ($ipend - $ipbegin) / 7 1; $BeginNum = $ipAllNum; //일치하는 IP 레코드를 검색합니다. 인덱스 레코드에서 while ($ip1num>$ipNum || $ip2num<$ipNum) {
  25. $Middle= intval(($EndNum $BeginNum) / 2);
  26. //포인터 오프셋 인덱스 위치를 읽고 4바이트를 읽습니다
  27. fseek($fd, $ipbegin 7 * $Middle);
  28. $ipData1 = fread($fd, 4);
  29. if(strlen($ipData1) < 4 ) {
  30. fclose($fd);
  31. return 'System Error';
  32. }
  33. //추출된 데이터를 긴 정수로 변환합니다. 데이터가 음수인 경우 2를 더합니다. 32번째 거듭제곱
  34. $ip1num = implode('', unpack('L', $ipData1));
  35. if($ip1num < 0) $ip1num = pow(2, 32); 긴 정수가 IP 주소보다 큽니다. 그런 다음 다음 주기의 끝 위치를 수정합니다. if($ip1num > $ipNum) {
  36. $EndNum = $Middle;
  37. continue;
  38. }
  39. //이전 인덱스를 가져온 후 다음 인덱스를 가져옵니다
  40. $DataSeek = fread($fd, 3);
  41. if(strlen($DataSeek) < 3) {
  42. fclose($fd);
  43. '시스템 오류' 반환 ;
  44. }
  45. $DataSeek = implode('', unpack('L', $DataSeek.chr(0)));
  46. fseek($fd, $DataSeek );
  47. $ipData2 = fread($fd, 4);
  48. if(strlen($ipData2) < 4) {
  49. fclose($fd);
  50. return '시스템 오류';
  51. }
  52. $ip2num = implode('', unpack('L', $ipData2));
  53. if($ip2num < 0) $ip2num = pow(2, 32);
  54. //알 수 없는 프롬프트를 찾을 수 없음
  55. if($ip2num < $ipNum) {
  56. if($Middle == $BeginNum) {
  57. fclose($fd);
  58. return 'Unknown' ;
  59. }
  60. $BeginNum = $Middle;
  61. }
  62. }
  63. //다음 코드가 헷갈려서 이해가 안 된다면 읽어보세요. 천천히
  64. $ipFlag = fread($fd, 1);
  65. if($ipFlag == chr(1)) {
  66. $ipSeek = fread($fd, 3);
  67. if(strlen ($ipSeek) < 3) {
  68. fclose($fd);
  69. return 'System Error';
  70. }
  71. $ipSeek = implode('', unpack('L', $ipSeek .chr(0)));
  72. fseek ($fd, $ipSeek);
  73. $ipFlag = fread($fd, 1);
  74. }
  75. if($ipFlag == chr(2)) {
  76. $AddrSeek = fread($fd, 3);
  77. if(strlen($AddrSeek) < 3) {
  78. fclose($fd);
  79. return 'System 오류';
  80. }
  81. $ipFlag = fread($fd, 1);
  82. if($ipFlag == chr(2)) {
  83. $AddrSeek2 = fread($fd, 3);
  84. if(strlen($AddrSeek2) < 3) {
  85. fclose($fd);
  86. return 'System Error';
  87. }
  88. $AddrSeek2 = implode('', unpack( 'L', $AddrSeek2.chr(0)) );
  89. fseek($fd, $AddrSeek2);
  90. } else {
  91. fseek($fd, -1, SEEK_CUR);
  92. }
  93. while(($char = fread($fd, 1)) != chr(0))
  94. $ipAddr2 .= $char;
  95. $AddrSeek = implode('' , unpack('L', $AddrSeek.chr( 0)));
  96. fseek($fd, $AddrSeek);
  97. while(($char = fread($fd, 1)) ! = chr(0))
  98. $ipAddr1 . = $char;
  99. } else {
  100. fseek($fd, -1, SEEK_CUR);
  101. while(($char = fread($fd, 1)) != chr(0))
  102. $ipAddr1 .= $char;
  103. $ipFlag = fread($fd, 1);
  104. if($ipFlag == chr(2) ) {
  105. $AddrSeek2 = fread($fd , 3);
  106. if(strlen($AddrSeek2) < 3) {
  107. fclose($fd);
  108. return '시스템 오류';
  109. }
  110. $AddrSeek2 = implode(' ', unpack('L', $AddrSeek2.chr(0)));
  111. fseek($fd, $AddrSeek2);
  112. } else {
  113. fseek($fd, -1, SEEK_CUR);
  114. }
  115. while(($char = fread($fd, 1)) != chr(0)){
  116. $ipAddr2 .= $char ;
  117. }
  118. }
  119. fclose($fd);
  120. //마지막으로 해당 교체 연산을 수행하고 결과를 반환합니다.
  121. if(preg_match('/http/i', $ipAddr2)) {
  122. $ ipAddr2 = '';
  123. }
  124. $ipaddr = "$ipAddr1 $ipAddr2";
  125. $ipaddr = preg_replace('/CZ88.Net/is', '', $ipaddr);
  126. $ ipaddr = preg_replace('/^s*/is', '', $ipaddr);
  127. $ipaddr = preg_replace('/s*$/is', '', $ipaddr);
  128. if(preg_match ( '/http/i', $ipaddr) || $ipaddr == '') {
  129. $ipaddr = '알 수 없음';
  130. }
  131. $ipaddr 반환;
  132. }
  133. header("콘텐츠 유형: 텍스트/html; charset=utf-8");
  134. $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
  135. if(isset($_GET['q']) ) {
  136. $ip = $_GET['q'];
  137. if(filter_var("http://".$ip,FILTER_VALIDATE_URL,FILTER_FLAG_HOST_REQUIRED)){
  138. $ip = gethostbyname($ip) ;
  139. }
  140. }
  141. echo "$ip,".mb_convert_encoding(convertip($ip),"utf-8","gb2312");
  142. ?>
코드 복사


원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿