导航:首页 > 编程语言 > php纯真ip库

php纯真ip库

发布时间:2022-07-17 06:40:47

1. php根据ip地址查地区

自己以前做过一个程序 根据discuz里面的ip查询改的

/**
* ip地址所属地区计算
* 修改自 discuz
* 使用dicuz tinyipdata数据文件
* 将一些英文提示修改为汉字
* $is_simple true的话显示到市 false显示到网通电信等等
******/

function convertip($ip,$is_simple=true,$ipfile='include/data/ip.dat') {

$return = '';

if( !file_exists($ipfile) ) $ipfile = '../'.$ipfile;

if(preg_match("/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/", $ip)) {

$iparray = explode('.', $ip);

if($iparray[0] == 10 || $iparray[0] == 127 || ($iparray[0] == 192 && $iparray[1] == 168) || ($iparray[0] == 172 && ($iparray[1] >= 16 && $iparray[1] <= 31))) {
return '局域网';
} elseif($iparray[0] > 255 || $iparray[1] > 255 || $iparray[2] > 255 || $iparray[3] > 255) {
return 'ERR';
} elseif($is_simple) {
return change_simply_area(convertip_tiny($ip, $ipfile));
}
else {
return convertip_tiny($ip, $ipfile);
}
}
}
/**
* 从ip文件得到ip所属地区
*
* 过滤掉了具体的位置(如 网通/电信/**网吧) 基本到市
***/
function convertip_tiny($ip, $ipdatafile) {

static $fp = NULL, $offset = array(), $index = NULL;

$ipdot = explode('.', $ip);
$ip = pack('N', ip2long($ip));

$ipdot[0] = (int)$ipdot[0];
$ipdot[1] = (int)$ipdot[1];

if($fp === NULL && $fp = @fopen($ipdatafile, 'rb')) {
$offset = unpack('Nlen', fread($fp, 4));
$index = fread($fp, $offset['len'] - 4);
} elseif($fp == FALSE) {
return '- Invalid IP data file';
}

$length = $offset['len'] - 1028;
$start = unpack('Vlen', $index[$ipdot[0] * 4] . $index[$ipdot[0] * 4 + 1] . $index[$ipdot[0] * 4 + 2] . $index[$ipdot[0] * 4 + 3]);

for ($start = $start['len'] * 8 + 1024; $start < $length; $start += 8) {

if ($index{$start} . $index{$start + 1} . $index{$start + 2} . $index{$start + 3} >= $ip) {
$index_offset = unpack('Vlen', $index{$start + 4} . $index{$start + 5} . $index{$start + 6} . "\x0");
$index_length = unpack('Clen', $index{$start + 7});
break;
}
}

fseek($fp, $offset['len'] + $index_offset['len'] - 1024);
if($index_length['len']) {
return mb_convert_encoding(fread($fp, $index_length['len']),'utf-8','gb2312'); //将读出的gb编码数据转成utf-8并返回
} else {
return '未知';
}

}

function change_simply_area($area) {
$tmp = explode(' ',$area); //过滤掉一些具体信息
return $tmp[0];
}

里面那个ipfile你可以去下载一个discuz 在 ipdata目录里面有wry.dat的文件就是了 其实这个就是网上用的最多的那个纯真版数据库 很多显示ip的qq用的也是那个
这两个函数的原型参考 discuz 里面 include\misc.func.php
共同学习进步 :)

2. PHP获取IP同时获取所在地区

需要用IP数据库或者在线IP查询服务。
国内的用纯真数据库(免费)
http://www.65536.cn/work/2008/MobileIPquery/qqwry.htm
国外的用Maxmind数据库(这个要收费)

3. php如何实现根据IP自动跳转首页

既然你的公司已经做到全国各地了,还稀罕服务器,做个分流就可以了。

4. 纯真ip数据库修改工具

首先,打开include/misc.func.php 找到 if(!$fd = @fopen($ipdatafile)) { 改为 if(!$fd = @fopen($ipdatafile, 'rb')) { 官方的文件里少了“rb”这个参数,也就是以二进制的方式打开 wry.dat 然后上传wry.dat 这部完成,可以读取纯真的数据库了,但是中文显示全部是乱码,就要进行第二步 找到代码 return '- '.$ipaddr; 改为 return mb_convert_encoding($ipaddr,"utf-8","gb2312"); 现在能正确显示纯真的IP了

5. 如何在QQ珊瑚虫中使用用纯真IP数据库

将纯真的IP文件改名为CoralWry.dat,然后复制到QQ的安装文件夹中就可以了.

6. 纯真ip数据库怎么用 (详细点的)

你是使用php来读取数据库的吗?

如果是的话,那么,你把下面的这个类保存成一个文件:

————————————————————
<?php

/**
* IP 地理位置查询类
*
* @author joyphper
* @version 1.0
* @right 2010 joyphper.net
*/
class ip_area {

/**
*
*
* @var resource
*/
private $fp;//IP库文件指针 resource
private $firstip;//第一条IP记录的偏移地址 int
private $lastip;//最后一条IP记录的偏移地址 int
private $totalip;//IP记录的总条数(不包含版本信息记录) int

/**
* 构造函数,打开 QQWry.Dat 文件并初始化类中的信息
*
* @param string $filename
* @return IpLocation
*/
public function __construct($filename = "data/ipdb.Dat") {//////////////////////////////////////////////这里注意,根据你的数据库存放位置不同,把这个数据库进行引入。
$this->fp = 0;
if (($this->fp = fopen($filename, 'rb')) !== false) {
$this->firstip = $this->getlong();
$this->lastip = $this->getlong();
$this->totalip = ($this->lastip - $this->firstip) / 7;//注册析构函数,使其在程序执行结束时执行
register_shutdown_function(array(&$this, '__destruct'));
}
}

/**
* 析构函数,用于在页面执行结束后自动关闭打开的文件。
*
*/
public function __destruct() {
if ($this->fp) {
fclose($this->fp);
}
$this->fp = 0;
}

/**
* 返回读取的长整型数
*
* @access private
* @return int
*/
private function getlong() {//将读取的little-endian编码的4个字节转化为长整型数
$result = unpack('Vlong', fread($this->fp, 4));
return $result['long'];
}

/**
* 返回读取的3个字节的长整型数
*
* @access private
* @return int
*/
private function getlong3() {//将读取的little-endian编码的3个字节转化为长整型数
$result = unpack('Vlong', fread($this->fp, 3).chr(0));
return $result['long'];
}

/**
* 返回压缩后可进行比较的IP地址
*
* @access private
* @param string $ip
* @return string
*/
private function packip($ip) {// 将IP地址转化为长整型数,如果在PHP5中,IP地址错误,则返回False,// 这时intval将Flase转化为整数-1,之后压缩成big-endian编码的字符串
return pack('N', intval(ip2long($ip)));
}

/**
* 返回读取的字符串
*
* @access private
* @param string $data
* @return string
*/
private function getstring($data = "") {
$char = fread($this->fp, 1);
while (ord($char) > 0) {// 字符串按照C格式保存,以\0结束
$data .= $char;// 将读取的字符连接到给定字符串之后
$char = fread($this->fp, 1);
}
return $data;
}

/**
* 返回地区信息
*
* @access private
* @return string
*/
private function getarea() {
$byte = fread($this->fp, 1);// 标志字节
switch (ord($byte)) {
case 0:// 没有区域信息
$area = "";
break;
case 1:
case 2:// 标志字节为1或2,表示区域信息被重定向
fseek($this->fp, $this->getlong3());
$area = $this->getstring();
break;
default:// 否则,表示区域信息没有被重定向
$area = $this->getstring($byte);
break;
}
return $area;
}

/**
* 根据所给 IP 地址或域名返回所在地区信息
*
* @access public
* @param string $ip
* @return array
*/
public function get($ip) {
if (!$this->fp) return null;// 如果数据文件没有被正确打开,则直接返回空
$location['ip'] = gethostbyname($ip); // 将输入的域名转化为IP地址
$ip = $this->packip($location['ip']); // 将输入的IP地址转化为可比较的IP地址
// 不合法的IP地址会被转化为255.255.255.255// 对分搜索
$l = 0;// 搜索的下边界
$u = $this->totalip;// 搜索的上边界
$findip = $this->lastip;// 如果没有找到就返回最后一条IP记录(QQWry.Dat的版本信息)
while ($l <= $u) {// 当上边界小于下边界时,查找失败
$i = floor(($l + $u) / 2); // 计算近似中间记录
fseek($this->fp, $this->firstip + $i * 7);
$beginip = strrev(fread($this->fp, 4));// 获取中间记录的开始IP地址// strrev函数在这里的作用是将little-endian的压缩IP地址转化为big-endian的格式// 以便用于比较,后面相同。
if ($ip < $beginip) {// 用户的IP小于中间记录的开始IP地址时
$u = $i - 1;// 将搜索的上边界修改为中间记录减一
}else{
fseek($this->fp, $this->getlong3());
$endip = strrev(fread($this->fp, 4)); // 获取中间记录的结束IP地址
if ($ip > $endip) {// 用户的IP大于中间记录的结束IP地址时
$l = $i + 1;// 将搜索的下边界修改为中间记录加一
}else{// 用户的IP在中间记录的IP范围内时
$findip = $this->firstip + $i * 7;
break;// 则表示找到结果,退出循环
}
}
}//获取查找到的IP地理位置信息
fseek($this->fp, $findip);
$location['beginip'] = long2ip($this->getlong()); // 用户IP所在范围的开始地址
$offset = $this->getlong3();
fseek($this->fp, $offset);
$location['endip'] = long2ip($this->getlong());// 用户IP所在范围的结束地址
$byte = fread($this->fp, 1);// 标志字节
switch (ord($byte)) {
case 1:// 标志字节为1,表示国家和区域信息都被同时重定向
$countryOffset = $this->getlong3();// 重定向地址
fseek($this->fp, $countryOffset);
$byte = fread($this->fp, 1);// 标志字节
switch (ord($byte)) {
case 2:// 标志字节为2,表示国家信息又被重定向
fseek($this->fp, $this->getlong3());
$location['country'] = $this->getstring();
fseek($this->fp, $countryOffset + 4);
$location['area'] = $this->getarea();
break;
default:// 否则,表示国家信息没有被重定向
$location['country'] = $this->getstring($byte);
$location['area'] = $this->getarea();
break;
}
break;
case 2:// 标志字节为2,表示国家信息被重定向
fseek($this->fp, $this->getlong3());
$location['country'] = $this->getstring();
fseek($this->fp, $offset + 8);
$location['area'] = $this->getarea();
break;
default:// 否则,表示国家信息没有被重定向
$location['country'] = $this->getstring($byte);
$location['area'] = $this->getarea();
break;
}
if ($location['country'] == " CZ88.NET") { // CZ88.NET表示没有有效信息
$location['country'] = "未知";
}
if ($location['area'] == " CZ88.NET") {
$location['area'] = "";
}
$location['country']=iconv('gbk', 'utf-8', $location['country']);
$location['area']=iconv('gbk', 'utf-8', $location['area']);
return $location;
}
}
?>
——————————————

这个类里有个引入数据库的行,需要你进行更改。

接下来,你在需要使用IP数据库的页面中,将这个类引入,并执行下列函数:

$ip = new ip_area();

这个类不用传参,自会得到ip的地理位置。

最后,如果你想得到IP值,那么可以使用以下方法:

————————

function ip(){//-------------------------------------------获得用户IP;
if(isset($_SERVER)){
if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])){
$realip=$_SERVER["HTTP_X_FORWARDED_FOR"];
}elseif(isset($_SERVER["HTTP_CLIENT_IP"])){
$realip=$_SERVER["HTTP_CLIENT_IP"];
}else{
$realip=$_SERVER["REMOTE_ADDR"];
}
}else{
if(getenv("HTTP_X_FORWARDED_FOR")){
$realip=getenv("HTTP_X_FORWARDED_FOR");
}elseif(getenv("HTTP_CLIENT_IP")){
$realip=getenv("HTTP_CLIENT_IP");
}else{
$realip=getenv("REMOTE_ADDR");
}
}
return $realip;
}

——————————————————————

7. 我想把纯真版ip数据库导入到sql数据库中,但是我如何把ip的格式生成十进制的一些字符串在线等..

192.168.1.142转换成125454564?你这是什么加密算法哦?

192.168.1.142转换为整数形式应该是3232235918
吧。计算方法是192*256*256*256 + 168*256*256 + 1*256 + 142

知道了上面的计算过程,你应该可以转换了吧。

不同语言写的语句稍微有区别,核心的算法就是上面的计算方法。

如果你想用SQL语句实现,可能稍微有点麻烦,一个思路是先把192.168.1.142转换到四个字段上,然后再用四个整数字段的值计算最后的值。

8. Discuz、Phpwind和Spacebuilder,哪一个好用

discuz缺点:

不能批量编辑用户,如不能批量移动到指定用户组。

帖间随机广告代码不能“每条随机广告一行,用回车分开”。

没有“沉底”功能。

没有道具,用户不能自行改名。

不能批量删除某个用户若干天内的所有回复或主题。

优点:

discuz免费。

使用快速回复框时不会说“您提交的参数错误。请仔细阅读论坛帮助文件,确保您有相应的操作权限。”

不会因为css代码下载不完全而导致版面格式混乱。

积分、用户组、发帖数级别设置更灵活。

比asp+access版论坛更节约空间。转换后数据库大小只有动网Access数据库的三分之一。

速度快。

可以匿名发帖。

可以设置昵称。

可以直接使用纯真IP库。

后台设置简单明了。

可以“用户栏目定制”。

可以“合并用户”。

可以在后台直接更改用户名。

页面上下都有页码,方便翻页。

可以前台批量操作。

不会多重引用。

用户编辑帖子可以自己更改主题分类。

phpwind特点:

独创、成熟

phpwind独创的技术架构和程序设计,获得国家专利认证,从根基着手塑造快速、稳健、可扩展的论坛程序。7年砺炼,在用户需求基础上进行不断创新与完善,无论企业还是娱乐,全面满足论坛建设。

安全

高效防护算法、程序监控技术、注入式入侵过滤技术、防CC攻击技术、安全验证机制构筑的站点安全体系,将风险防患于未然

快捷、稳定、高效

核心参数的合理配置、负载均衡处理技术、数据库分表技术、文件读写稳定性算法帮助您最大限度地节省硬件资源,保障站点在服务器繁忙时快速稳定运行。

不仅为站长而设计

站长建站,影响的却是网民。PHPWind“不仅为站长而设计”的设计理念,将人性化融入论坛功能的点点滴滴。清晰的用户等级与权限设置,便捷完整的论坛功能与管理操作,详细地日志与统计记录,集成交易与支付,轻松备份/恢复数据给予站长和每一位会员良好的用户体验。

可扩展

开源、规范化的代码编写、标准化的插件接口和清晰简洁的模板体系理念,让站点无限延伸至未来。

完美整合

PHPWind所取得的同业合作,为您提供更多建站软件选择和无间隙的软件服务,帮助站点多面需求。查看详情

丰富的第三方资源

近千款风格,近百款插件,仍在不断丰富。查看详情

操作系统要求

PHPWind具备跨平台特性,支持 Linux/Unix及Windows 2000/2003/ XP等操作系统。

针对上述操作系统,我们队软件做了大量的测试和实地检验,保证PHPWind可以安全稳定的运行,但您仍需做好服务器操作系统的安全防备措施,例如Windows用户需更改MYSQL的初始密码,使用较新的稳定的软件版本等。

语言及数据库支撑环境要求可用的 web 服务器(如 Apache、Zeus、IIS 等)

php 5.2.x及以上

MySQL5.1.x及以上

Zend Optimizer 3.x及以上(可以不用)

如果您租用虚拟主机,请咨询虚拟主机提供商,您的空间服务器是否已安装了上述软件。

由于
PHPWind的数据表具有前缀设计,因此通常情况下可以将PHPWind与其他软件安装在同一个数据库中,或采用不同的前缀名在同一个数据库中安装多个PHPWind
论坛而不产生冲突。

您的 MySQL 数据库账号应当拥有 CREATE、DROP、ALTER 等执行权限。

安装可能用到的工具软件

PHPWind论坛系统的安装使用非常简单,因此您可能需要用到的工具软件也非常少。

1)您可能需要一个FTP客户端软件来上传PHPWind程序文件;

2)PHPWind是一个开源系统,您可以按自己的想法来修改程序代码,从而得到自己想要的社区呈现效果,或者社区系统某些配置文件的参数需要修改,此时您可能需要一个简单的文本文件编辑软件,一般操作系统自带的如Windows的记事本或第三方软件如EditPlus,都可以。

Spacebuilder - 特色

1.产品架构:采用“平台+应用”的设计思想,可以方便及快捷的扩展新的应用;

2. Ajax:表现层采用大量的jQuery技术,使用户获得良好的用户体验;

3. asp.net mvc:采用微软最新的asp.net
mvc(c#)进行表现层开发。彻底消除了ViewState可以万全控制html代码的输出;Controller与View完全分离充分避免了皮肤机制的性能损失;原生态的url
routing更利于urlrewrite。

4. 数据存储:目前采用SQL Server2000/SQLServer2005/SQL
Server2008进行数据存储,由于数据访问层采用了Provide设计模式所以可以方便的移植到其他关系型数据库;

5. 数据访问:为了提升性能以及数据库安全性,数据访问全部采用存储过程;

6. 高效缓存:使用可分区的缓存技术,并且具有优秀的缓存过期策略,使站点获得性能提升的同时,保证缓存与数据库数据同步;

7. 全文检索:以Lucene为核心实现全文检索功能,实现索引库自动更新,并提供企业级的全文检索性能;

8. 扩展机制:优秀的皮肤实现机制,使客户可以方便的对现有皮肤进行修改或开发新的皮肤;核心模块提供了全局事件,客户可以开发自己的Mole;

9. 配置文件:配置信息均采用XML格式,易于管理设置;

10. 所有页面均采用xhtml+css进行设计,符合web标准,兼容所有主流浏览器(IE、Firefox),降低页面流量,提高加载速度;

9. PHP有没有生成国内各省份IP地址的类库

有.你下载个cms都有这功能,比如phpcms

10. PHP限制某城市访问

代码如下,绝对符合你的要求
<?php
//程序不难,难在ip数据获取和解析。这个$ipInforProviderUrl是有道未公开的ip查询api,
//返回信息中只有ip地址和地理位置。这个Provider随时可能失效,请楼主自行寻找
//在适当的脚本中加入以下代码即可实现楼主的设想
//例如config.php,common.php等被几乎所有脚本include过的公共脚本
$ipInforProviderUrl="http://www.you.com/smartresult-xml/search.s?&type=ip&q=";
$ip=$_SERVER["REMOTE_ADDR"];
$ipInfor=file_get_contents($ipInforProviderUrl.$ip);
echo $ipInfor;
if(strpos($ipInfor,"深圳"))
echo '禁止访问';
?>

阅读全文

与php纯真ip库相关的资料

热点内容
穿越到各种影视小说 浏览:963
爱情电影网站apdy 浏览:716
用什么看刚出的枪版电影 浏览:364
有一本小说女主叫苏晚 浏览:551
韩国大尺度来电 浏览:14
朴银狐妻子的职业电影 浏览:821
国产强奸的大尺度电影有哪些 浏览:59
欧美爱情电影船戏 浏览:924
拍摄指南小说txt百度下载 浏览:576
大美记者电视剧 浏览:484
男朋友在北京当快递员的电影 浏览:358
电影中有美娜名字的电影叫什么 浏览:833
美剧五十黑2简介 浏览:43
可以在线看的小网址 浏览:139
香港老电影在线免费观看 浏览:362
尸家重地2国语版免费 浏览:162
韩剧 女儿突然带着孙子来找他 浏览:562
2020年情感电影院上映列表 浏览:993
变身小说男变女嫁人 浏览:34
原罪未删减床戏在什么时间 浏览:849