欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP判斷IP并轉跳到相應城市分站的方法

 更新時間:2015年03月25日 09:27:58   作者:songguo  
這篇文章主要介紹了PHP判斷IP并轉跳到相應城市分站的方法,實例分析了php解析URL及跳轉的技巧,具有一定參考借鑒價值,需要的朋友可以參考下

本文實例講述了PHP判斷IP并轉跳到相應城市分站的方法。分享給大家供大家參考。具體實現(xiàn)方法如下:

<?php  
class QQWry{  
  var $StartIP=0;  
  var $EndIP=0;  
  var $Country='';  
  var $Local='';  
  var $CountryFlag=0;
// 標識 Country位置  
// 0x01,隨后3字節(jié)為Country偏移,沒有Local  
// 0x02,隨后3字節(jié)為Country偏移,接著是Local  
// 其他,Country,Local,Local有類似的壓縮。可能多重引用。  
  var $fp;  
  var $FirstStartIp=0;  
  var $LastStartIp=0;  
  var $EndIpOff=0 ;  
  function getStartIp($RecNo){  
   $offset=$this->FirstStartIp+$RecNo * 7 ;  
   @fseek($this->fp,$offset,SEEK_SET) ;  
   $buf=fread($this->fp ,7) ;  
   $this->EndIpOff=ord($buf[4])+(ord($buf[5])*256)+(ord($buf[6])*256*256);
   $this->StartIp=ord($buf[0])+(ord($buf[1])*256)+(ord($buf[2])*256*256)+(ord($buf[3])*256*256*256);
   return $this->StartIp;
  }
  function getEndIp(){  
   @fseek ( $this->fp , $this->EndIpOff , SEEK_SET ) ;  
   $buf=fread ( $this->fp , 5 ) ;  
   $this->EndIp=ord($buf[0]) + (ord($buf[1])*256) + (ord($buf[2])*256*256) + (ord($buf[3])*256*256*256);
   $this->CountryFlag=ord ( $buf[4] ) ;  
   return $this->EndIp ;  
  }  
  function getCountry(){  
   switch ( $this->CountryFlag ) {  
    case 1:  
    case 2:  
     $this->Country=$this->getFlagStr ( $this->EndIpOff+4) ;  
     //echo sprintf('EndIpOffset=(%x)',$this->EndIpOff );  
     $this->Local=( 1 == $this->CountryFlag )? '' : $this->getFlagStr ( $this->EndIpOff+8);
     break ;  
    default :  
     $this->Country=$this->getFlagStr ($this->EndIpOff+4);  
     $this->Local=$this->getFlagStr ( ftell ( $this->fp ));  
   }  
  }  
  function getFlagStr ($offset){  
   $flag=0 ;  
   while(1){  
    @fseek($this->fp ,$offset,SEEK_SET) ;  
    $flag=ord(fgetc($this->fp ) ) ;  
    if ( $flag == 1 || $flag == 2 ) {  
     $buf=fread ($this->fp , 3 ) ;  
     if ($flag==2){  
      $this->CountryFlag=2;  
      $this->EndIpOff=$offset - 4 ;  
     }  
     $offset=ord($buf[0]) + (ord($buf[1])*256) + (ord($buf[2])* 256*256);  
    }  
    else{  
     break ;  
    }  
   }  
   if($offset<12)  
    return '';  
   @fseek($this->fp , $offset , SEEK_SET ) ;  
  
   return $this->getStr();  
  }  
  function getStr ( )  
  {  
   $str='' ;  
   while ( 1 ) {  
    $c=fgetc ( $this->fp ) ;  
    //echo "$cn" ;  
    if(ord($c[0])== 0 )  
     break ;  
    $str.= $c ;  
   }  
   //echo "$str n";  
   return $str ;  
  }  
  function qqwry ($dotip='') {  
    if( !is_string($dotip) || $dotip==''){return;}  
    if(preg_match("/^127/",$dotip)){$this->Country="本地網(wǎng)絡";return ;}  
    elseif(preg_match("/^192/",$dotip)) {$this->Country="局域網(wǎng)";return ;}  
   $nRet;  
   $ip=$this->IpToInt ( $dotip );  
   $this->fp= fopen(__QQWRY__, "rb");  
   if ($this->fp == NULL) {  
     $szLocal= "OpenFileError";  
    return 1;  
   }
   @fseek ( $this->fp , 0 , SEEK_SET );
   $buf=fread ( $this->fp , 8 );
   $this->FirstStartIp=ord($buf[0]) + (ord($buf[1])*256) + (ord($buf[2])*256*256) + (ord($buf[3])*256*256*256);
   $this->LastStartIp=ord($buf[4]) + (ord($buf[5])*256) + (ord($buf[6])*256*256) + (ord($buf[7])*256*256*256);
   $RecordCount= floor(($this->LastStartIp - $this->FirstStartIp) / 7);
   if ($RecordCount <= 1){  
    $this->Country="FileDataError";  
    fclose($this->fp) ;  
    return 2 ;  
   }  
   $RangB= 0;  
   $RangE= $RecordCount;  
   // Match ...  
   while ($RangB < $RangE-1)  
   {  
   $RecNo= floor(($RangB + $RangE) / 2);
   $this->getStartIp ( $RecNo ) ;  
    if ( $ip == $this->StartIp )  
    {  
     $RangB=$RecNo ;  
     break ;  
    }  
   if ($ip>$this->StartIp)  
    $RangB= $RecNo;  
   else 
    $RangE= $RecNo;  
   }  
   $this->getStartIp ( $RangB ) ;  
   $this->getEndIp ( ) ;  
   if ( ( $this->StartIp <= $ip ) && ( $this->EndIp >= $ip ) ){  
    $nRet=0 ;  
    $this->getCountry ( ) ;  
    //這樣不太好..............所以..........  
    $this->Local=str_replace("area error", "",$this->Local);  
   }  
   else{  
    $nRet=3 ;  
    $this->Country='未知' ;  
    $this->Local='' ;  
   }  
   fclose ( $this->fp );  
$this->Country=preg_replace("/(CZ88.NET)|(純真網(wǎng)絡)/","局域網(wǎng)/未知",$this->Country);
$this->Local=preg_replace("/(CZ88.NET)|(純真網(wǎng)絡)/","局域網(wǎng)/未知",$this->Local);  
//////////////看看 $nRet在上面的值是什么0和3,于是將下面的行注釋掉  
    return $nRet ;  
//return "$this->Country $this->Local";#如此直接返回位置和國家便可以了  
  }  
  function IpToInt($Ip) {  
   $array=explode('.',$Ip);  
   $Int=($array[0] * 256*256*256) + ($array[1]*256*256) + ($array[2]*256) + $array[3];
   return $Int;  
  }  
 }  
?>

實例演示如下:

$QQWry=new QQWry;
$QQWry->QQWry("60.31.95.255");
$country = $QQWry->Country;
echo $QQWry->Country.",".$QQWry->Local;

希望本文所述對大家的php程序設計有所幫助。

相關文章

  • PHP防止表單重復提交的幾種常用方法匯總

    PHP防止表單重復提交的幾種常用方法匯總

    這篇文章主要介紹了PHP防止表單重復提交的幾種常用方法匯總,在PHP項目開發(fā)中有不錯的實用價值,需要的朋友可以參考下
    2014-08-08
  • Linux下CoreSeek及PHP擴展模塊的安裝

    Linux下CoreSeek及PHP擴展模塊的安裝

    前提條件是系統(tǒng)己安裝完成apache mysql php的WEB服務。我是以yum來安裝的。如果你沒有安裝過請按照下面給出的鏈接先完成基本的LAMP環(huán)境的安裝
    2012-09-09
  • PHP swoole和redis異步任務實現(xiàn)方法分析

    PHP swoole和redis異步任務實現(xiàn)方法分析

    這篇文章主要介紹了PHP swoole和redis異步任務實現(xiàn)方法,結合具體實例形式對比分析了swoole和redis異步任務具體實現(xiàn)方法及區(qū)別,需要的朋友可以參考下
    2019-08-08
  • Yii使用queue實現(xiàn)隊列流程講解

    Yii使用queue實現(xiàn)隊列流程講解

    Yii是一個高性能的PHP5的web應用程序開發(fā)框架。通過一個簡單的命令行工具yiic可以快速創(chuàng)建一個web應用程序的代碼框架,開發(fā)者可以在生成的代碼框架基礎上添加業(yè)務邏輯,以快速完成應用程序的開發(fā)
    2022-11-11
  • php中get_object_vars()方法用法實例

    php中get_object_vars()方法用法實例

    這篇文章主要介紹了php中get_object_vars()方法用法,實例分析了get_object_vars()方法獲取對象中屬性的使用技巧,需要的朋友可以參考下
    2015-02-02
  • PHP下載遠程文件到本地存儲的方法

    PHP下載遠程文件到本地存儲的方法

    這篇文章主要介紹了PHP下載遠程文件到本地存儲的方法,實例分析了php遠程文件的操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • php實現(xiàn)轉換html格式為文本格式的方法

    php實現(xiàn)轉換html格式為文本格式的方法

    這篇文章主要介紹了php實現(xiàn)轉換html格式為文本格式的方法,通過一個自定義函數(shù)實現(xiàn)針對HTML標簽的過濾,涉及php正則替換的相關操作技巧,需要的朋友可以參考下
    2016-05-05
  • 深入理解PHP中的Session和Cookie

    深入理解PHP中的Session和Cookie

    本篇文章是對PHP中的Session和Cookie進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • php生成靜態(tài)文件的多種方法分享

    php生成靜態(tài)文件的多種方法分享

    最近需要將自己寫的php文件生成靜態(tài),經過查找,發(fā)現(xiàn)有多種方法,不同需求可以選擇不同的方法
    2012-07-07
  • PHP實現(xiàn)通過中文字符比率來判斷垃圾評論的方法

    PHP實現(xiàn)通過中文字符比率來判斷垃圾評論的方法

    這篇文章主要介紹了PHP實現(xiàn)通過中文字符比率來判斷垃圾評論的方法,是一個比較實用的技巧,對于進行PHP應用程序開發(fā)來說有一定的參考借鑒價值,需要的朋友可以參考下
    2014-10-10

最新評論