PHP判断IP并转跳到相应城市分站的方法,ip分站_PHP教程
PHP判断IP并转跳到相应城市分站的方法,ip分站
本文实例讲述了PHP判断IP并转跳到相应城市分站的方法。分享给大家供大家参考。具体实现方法如下:
<?php class QQWry{ var $StartIP=0; var $EndIP=0; var $Country=''; var $Local=''; var $CountryFlag=0; // 标识 Country位置 // 0x01,随后3字节为Country偏移,没有Local // 0x02,随后3字节为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="本地网络";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 ); $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)|(纯真网络)/","局域网/未知",$this->Country); $this->Local=preg_replace("/(CZ88.NET)|(纯真网络)/","局域网/未知",$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程序设计有所帮助。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

PHP 8.4 带来了多项新功能、安全性改进和性能改进,同时弃用和删除了大量功能。 本指南介绍了如何在 Ubuntu、Debian 或其衍生版本上安装 PHP 8.4 或升级到 PHP 8.4

Visual Studio Code,也称为 VS Code,是一个免费的源代码编辑器 - 或集成开发环境 (IDE) - 可用于所有主要操作系统。 VS Code 拥有针对多种编程语言的大量扩展,可以轻松编写

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

静态绑定(static::)在PHP中实现晚期静态绑定(LSB),允许在静态上下文中引用调用类而非定义类。1)解析过程在运行时进行,2)在继承关系中向上查找调用类,3)可能带来性能开销。

本教程演示了如何使用PHP有效地处理XML文档。 XML(可扩展的标记语言)是一种用于人类可读性和机器解析的多功能文本标记语言。它通常用于数据存储

字符串是由字符组成的序列,包括字母、数字和符号。本教程将学习如何使用不同的方法在PHP中计算给定字符串中元音的数量。英语中的元音是a、e、i、o、u,它们可以是大写或小写。 什么是元音? 元音是代表特定语音的字母字符。英语中共有五个元音,包括大写和小写: a, e, i, o, u 示例 1 输入:字符串 = "Tutorialspoint" 输出:6 解释 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。总共有 6 个元

PHP的魔法方法有哪些?PHP的魔法方法包括:1.\_\_construct,用于初始化对象;2.\_\_destruct,用于清理资源;3.\_\_call,处理不存在的方法调用;4.\_\_get,实现动态属性访问;5.\_\_set,实现动态属性设置。这些方法在特定情况下自动调用,提升代码的灵活性和效率。

PHP和Python各有优势,选择依据项目需求。1.PHP适合web开发,尤其快速开发和维护网站。2.Python适用于数据科学、机器学习和人工智能,语法简洁,适合初学者。
