<pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

          <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

          <p id="bbfd9"></p>

          <p id="bbfd9"><cite id="bbfd9"></cite></p>

            <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

            <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
            <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>

            PHP根據IP地址獲取所在城市具體實現

            時間:2025-11-29 06:41:31 php語言

            PHP根據IP地址獲取所在城市具體實現

              了PHP根據IP地址獲取所在城市具體實現,有需要的朋友可以參考一下,就讓小編來告訴大家吧!

              文件目錄:

              ipLocation

              -----qqwry

              ----------QQWry.Dat

              -----ipCity.class.php

              ipCity.class.php文件代碼:

              復制代碼 代碼如下:

              <?php

              class ipCity {

              /**

              * 根據ip地址獲取對應所在城市

              * @param type $userip 用戶IP地址

              * @return string

              */

              public function getCity( $userip, $dat_path = '' ) {

              /pic/p>

              empty( $dat_path ) && $dat_path = FCPATH . 'plugin/ipLocation/qqwry/QQWry.Dat';

              /pic/p>

              if ( preg_match( "/^([0-9]{1,3}.){3}[0-9]{1,3}$/", $userip ) == 0 ) {

              return 'IP Address Invalid';

              }

              /pic/p>

              if ( !$fd = @fopen( $dat_path, 'rb' ) ) {

              return 'IP data file not exists or access denied';

              }

              /pic/p>

              $userip = explode( '.', $userip );

              $useripNum = $userip[0] * 16777216 + $userip[1] * 65536 + $userip[2] * 256 + $userip[3];

              /pic/p>

              $DataBegin = fread( $fd, 4 );

              $DataEnd = fread( $fd, 4 );

              $useripbegin = implode( '', unpack( 'L', $DataBegin ) );

              if ( $useripbegin < 0 )

              $useripbegin += pow( 2, 32 );

              $useripend = implode( '', unpack( 'L', $DataEnd ) );

              if ( $useripend < 0 )

              $useripend += pow( 2, 32 );

              $useripAllNum = ($useripend - $useripbegin) / 7 + 1;

              $BeginNum = 0;

              $EndNum = $useripAllNum;

              /pic/p>

              while ( $userip1num > $useripNum || $userip2num < $useripNum ) {

              $Middle = intval( ($EndNum + $BeginNum) / 2 );

              /pic/p>

              fseek( $fd, $useripbegin + 7 * $Middle );

              $useripData1 = fread( $fd, 4 );

              if ( strlen( $useripData1 ) < 4 ) {

              fclose( $fd );

              return 'File Error';

              }

              /pic/p>

              $userip1num = implode( '', unpack( 'L', $useripData1 ) );

              if ( $userip1num < 0 )

              $userip1num += pow( 2, 32 );

              /pic/p>

              if ( $userip1num > $useripNum ) {

              $EndNum = $Middle;

              continue;

              }

              /pic/p>

              $DataSeek = fread( $fd, 3 );

              if ( strlen( $DataSeek ) < 3 ) {

              fclose( $fd );

              return 'File Error';

              }

              $DataSeek = implode( '', unpack( 'L', $DataSeek . chr( 0 ) ) );

              fseek( $fd, $DataSeek );

              $useripData2 = fread( $fd, 4 );

              if ( strlen( $useripData2 ) < 4 ) {

              fclose( $fd );

              return 'File Error';

              }

              $userip2num = implode( '', unpack( 'L', $useripData2 ) );

              if ( $userip2num < 0 )

              $userip2num += pow( 2, 32 );

              /pic/p>

              if ( $userip2num < $useripNum ) {

              if ( $Middle == $BeginNum ) {

              fclose( $fd );

              return 'No Data';

              }

              $BeginNum = $Middle;

              }

              }

              $useripFlag = fread( $fd, 1 );

              if ( $useripFlag == chr( 1 ) ) {

              $useripSeek = fread( $fd, 3 );

              if ( strlen( $useripSeek ) < 3 ) {

              fclose( $fd );

              return 'System Error';

              }

              $useripSeek = implode( '', unpack( 'L', $useripSeek . chr( 0 ) ) );

              fseek( $fd, $useripSeek );

              $useripFlag = fread( $fd, 1 );

              }

              if ( $useripFlag == chr( 2 ) ) {

              $AddrSeek = fread( $fd, 3 );

              if ( strlen( $AddrSeek ) < 3 ) {

              fclose( $fd );

              return 'System Error';

              }

              $useripFlag = fread( $fd, 1 );

              if ( $useripFlag == chr( 2 ) ) {

              $AddrSeek2 = fread( $fd, 3 );

              if ( strlen( $AddrSeek2 ) < 3 ) {

              fclose( $fd );

              return 'System Error';

              }

              $AddrSeek2 = implode( '', unpack( 'L', $AddrSeek2 . chr( 0 ) ) );

              fseek( $fd, $AddrSeek2 );

              } else {

              fseek( $fd, -1, SEEK_CUR );

              }

              while ( ($char = fread( $fd, 1 )) != chr( 0 ) )

              $useripAddr2 .= $char;

              $AddrSeek = implode( '', unpack( 'L', $AddrSeek . chr( 0 ) ) );

              fseek( $fd, $AddrSeek );

              while ( ($char = fread( $fd, 1 )) != chr( 0 ) )

              $useripAddr1 .= $char;

              } else {

              fseek( $fd, -1, SEEK_CUR );

              while ( ($char = fread( $fd, 1 )) != chr( 0 ) )

              $useripAddr1 .= $char;

              $useripFlag = fread( $fd, 1 );

              if ( $useripFlag == chr( 2 ) ) {

              $AddrSeek2 = fread( $fd, 3 );

              if ( strlen( $AddrSeek2 ) < 3 ) {

              fclose( $fd );

              return 'System Error';

              }

              $AddrSeek2 = implode( '', unpack( 'L', $AddrSeek2 . chr( 0 ) ) );

              fseek( $fd, $AddrSeek2 );

              } else {

              fseek( $fd, -1, SEEK_CUR );

              }

              while ( ($char = fread( $fd, 1 )) != chr( 0 ) ) {

              $useripAddr2 .= $char;

              }

              }

              fclose( $fd );

              /pic/p>

              if ( preg_match( '/http/i', $useripAddr2 ) ) {

              $useripAddr2 = '';

              }

              $useripaddr = "$useripAddr1 $useripAddr2";

              $useripaddr = preg_replace( '/CZ88.Net/is', '', $useripaddr );

              $useripaddr = preg_replace( '/^s*/is', '', $useripaddr );

              $useripaddr = preg_replace( '/s*$/is', '', $useripaddr );

              if ( preg_match( '/http/i', $useripaddr ) || $useripaddr == '' ) {

              $useripaddr = 'No Data';

              } elseif ( !$this->is_utf8( $useripaddr ) ) {

              $useripaddr = iconv( 'GBK', 'UTF-8', $useripaddr );

              }

              return $useripaddr;

              }

              /**

              * 判斷是否我utf-8編碼的字符串

              * @param type $string

              * @return boolean

              */

              private function is_utf8( $string ) {

              if ( preg_match( "/^([" . chr( 228 ) . "-" . chr( 233 ) . "]{1}[" . chr( 128 ) . "-" . chr( 191 ) . "]{1}[" . chr( 128 ) . "-" . chr( 191 ) . "]{1}){1}/", $string ) == true || preg_match( "/([" . chr( 228 ) . "-" . chr( 233 ) . "]{1}[" . chr( 128 ) . "-" . chr( 191 ) . "]{1}[" . chr( 128 ) . "-" . chr( 191 ) . "]{1}){1}$/", $string ) == true || preg_match( "/([" . chr( 228 ) . "-" . chr( 233 ) . "]{1}[" . chr( 128 ) . "-" . chr( 191 ) . "]{1}[" . chr( 128 ) . "-" . chr( 191 ) . "]{1}){2,}/", $string ) == true ) {

              return true;

              } else {

              return false;

              }

              }

              }

            【PHP根據IP地址獲取所在城市具體實現】相關文章:

            php根據IP地址獲取當前地理位置接口12-16

            php獲取IP物理地址的方法08-13

            php怎樣根據ip地址查地區09-09

            php通過Chianz.com獲取IP地址與地區的方法11-18

            實現PHP實現限制IP訪問02-23

            電腦如何自動獲取ip地址11-18

            php如何獲得ip地址10-30

            PHP獲取真實的客戶IP的方法01-27

            php獲取當前url地址的方法09-20

                    <pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

                    <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

                    <p id="bbfd9"></p>

                    <p id="bbfd9"><cite id="bbfd9"></cite></p>

                      <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

                      <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
                      <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
                      飘沙影院