网站建设培训课程,wordpress 网店,沭阳住房和城乡建设局网站,十大中文网站排名本文实例讲述了PHP判断IP并转跳到相应城市分站的方法。分享给大家供大家参考。具体实现方法如下#xff1a;class QQWry{var $StartIP0;var $EndIP0;var $Country;var $Local;var $CountryFlag0;// 标识 Country位置// 0x01,随后3字节为Country偏移,没有Local// 0x02,随后3字节…本文实例讲述了PHP判断IP并转跳到相应城市分站的方法。分享给大家供大家参考。具体实现方法如下class QQWry{var $StartIP0;var $EndIP0;var $Country;var $Local;var $CountryFlag0;// 标识 Country位置// 0x01,随后3字节为Country偏移,没有Local// 0x02,随后3字节为Country偏移接着是Local// 其他,Country,Local,Local有类似的压缩。可能多重引用。var $fp;var $FirstStartIp0;var $LastStartIp0;var $EndIpOff0 ;function getStartIp($RecNo){$offset$this-FirstStartIp$RecNo * 7 ;fseek($this-fp,$offset,SEEK_SET) ;$buffread($this-fp ,7) ;$this-EndIpOfford($buf[4])(ord($buf[5])*256)(ord($buf[6])*256*256);$this-StartIpord($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 ) ;$buffread ( $this-fp , 5 ) ;$this-EndIpord($buf[0]) (ord($buf[1])*256) (ord($buf[2])*256*256) (ord($buf[3])*256*256*256);$this-CountryFlagord ( $buf[4] ) ;return $this-EndIp ;}function getCountry(){switch ( $this-CountryFlag ) {case 1:case 2:$this-Country$this-getFlagStr ( $this-EndIpOff4) ;//echo sprintf(EndIpOffset(%x),$this-EndIpOff );$this-Local( 1 $this-CountryFlag )? : $this-getFlagStr ( $this-EndIpOff8);break ;default :$this-Country$this-getFlagStr ($this-EndIpOff4);$this-Local$this-getFlagStr ( ftell ( $this-fp ));}}function getFlagStr ($offset){$flag0 ;while(1){fseek($this-fp ,$offset,SEEK_SET) ;$flagord(fgetc($this-fp ) ) ;if ( $flag 1 || $flag 2 ) {$buffread ($this-fp , 3 ) ;if ($flag2){$this-CountryFlag2;$this-EndIpOff$offset - 4 ;}$offsetord($buf[0]) (ord($buf[1])*256) (ord($buf[2])* 256*256);}else{break ;}}if($offset12)return ;fseek($this-fp , $offset , SEEK_SET ) ;return $this-getStr();}function getStr ( ){$str ;while ( 1 ) {$cfgetc ( $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本地网络;return ;}elseif(preg_match(/^192/,$dotip)) {$this-Country局域网;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 );$buffread ( $this-fp , 8 );$this-FirstStartIpord($buf[0]) (ord($buf[1])*256) (ord($buf[2])*256*256) (ord($buf[3])*256*256*256);$this-LastStartIpord($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-CountryFileDataError;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 ) ){$nRet0 ;$this-getCountry ( ) ;//这样不太好..............所以..........$this-Localstr_replace(area error, ,$this-Local);}else{$nRet3 ;$this-Country未知 ;$this-Local ;}fclose ( $this-fp );$this-Countrypreg_replace(/(CZ88.NET)|(纯真网络)/,局域网/未知,$this-Country);$this-Localpreg_replace(/(CZ88.NET)|(纯真网络)/,局域网/未知,$this-Local);//看看 $nRet在上面的值是什么0和3于是将下面的行注释掉return $nRet ;//return $this-Country $this-Local;#如此直接返回位置和国家便可以了}function IpToInt($Ip) {$arrayexplode(.,$Ip);$Int($array[0] * 256*256*256) ($array[1]*256*256) ($array[2]*256) $array[3];return $Int;}}?实例演示如下$QQWrynew QQWry;$QQWry-QQWry(60.31.95.255);$country $QQWry-Country;echo $QQWry-Country.,.$QQWry-Local;希望本文所述对大家的php程序设计有所帮助。