随着互联网的发展和深入,越来越多的网站和应用程序需要获取用户所在地的信息,以便提供更精准的服务。而获取用户所在地信息中,城市信息是其中不可或缺的一部分。而纯真数据库则是一个权威的IP地址归属地查询数据库,其中包含了全国各个城市的信息。本文将介绍的方法。
一、准备工作
在之前,需要进行一些准备工作。首先需要下载并解压缩纯真数据库的文件。纯真数据库文件可以从纯真官网或者第三方网站中获取,其中包括 qqwry.dat , location.dat 等文件。在下载完成后,我们需要将这些文件上传至服务器的指定目录中。例如将这些文件放在 /usr/local/qqwry 目录下。
二、连接纯真数据库
在获取纯真数据库中的城市信息之前,我们需要先连接到纯真数据库中。在 PHP 中使用数据库的函数,需要依赖 PHP 的扩展库。在连接纯真数据库时,要用到 PHP 的 fread 函数读取数据,所以需要在更改 php.ini 文件中的 file_uploads 配置项为 On, 否则读取数据时将出现错误。连接纯真数据库的代码如下:
“`
// 纯真数据库文件路径
define(‘QQWRY_PATH’, ‘/usr/local/qqwry/qqwry.dat’);
// 连接纯真数据库
function connectQQWry() {
// 打开纯真数据库文件
$fp = fopen(QQWRY_PATH, ‘rb’);
// 判断纯真数据库 文件是否打开成功
if($fp === false) {
return false;
}
// 读取文件前8个字节,获取文件头信息
$header = fread($fp, 8);
// 判断纯真数据库是否正确
if(strlen($header) != 8 || $header[0] != chr(255) || $header[1] != chr(255) || $header[2] != chr(255) || $header[3] != chr(255)) {
fclose($fp);
return false;
}
// 读取文件索引起始位置和结束位置
$begin = unpack(‘L’, $header[4].$header[5].$header[6].chr(0))[1];
$end = unpack(‘L’, $header[4].$header[5].$header[6].chr(0))[1];
// 返回纯真数据库的文件指针和开始,结束位置信息
return [
‘fp’ => $fp,
‘begin’ => $begin,
‘end’ => $end
];
}
“`
通过 connectQQWry 函数,我们可以连接至纯真数据库并获取到起始位置和结束位置的信息。在执行这个函数时可以得到 $fp、$begin 以及 $end 三个值:
– $fp:纯真数据库文件指针。
– $begin:纯真数据库索引信息起始位置。
– $end:纯真数据库索引信息结束位置。
三、查询所在城市信息
在连接至纯真数据库并获取索引信息后,我们就可以查询所在城市了。查询所在城市的方法如下:
“`
// 查询IP地址所在城市信息
function queryCity($ip) {
// 获取全国省市信息
$provinces = getProvinces();
// 把IP地址转换为二进制数
$ip = pack(‘N’, intval(ip2long($ip)));
// 连接至纯真数据库
$qqwry = connectQQWry();
if ($qqwry === false) {
return false;
}
// 获取索引信息的起始和结束位置
$begin = $qqwry[‘begin’];
$end = $qqwry[‘end’];
// 查找索引信息
while($begin
// 计算索引的中间位置
$middle = floor(($begin + $end) / 2);
// 移动文件指针到当前索引位置
fseek($qqwry[‘fp’], $middle * 7);
// 读取当前索引的起始位置和结束位置信息
$data = fread($qqwry[‘fp’], 7);
// 判断当前 IP 是否在当前索引范围内
if($ip
$end = $middle – 1;
} else {
// 将指针移动到下一个索引范围
fseek($qqwry[‘fp’], unpack(‘L’, substr($data, 4))[1]);
$begin = $middle + 1;
}
}
// 找到目标IP索引信息位置
$pos = unpack(‘L’, fread($qqwry[‘fp’], 4))[1];
// 读取目标IP索引信息
fseek($qqwry[‘fp’], $pos);
$data = fread($qqwry[‘fp’], 4);
// 判断是否存在重定向信息
if($data[0] == chr(1)) {
$pos = unpack(‘L’, substr($data, 1))[1];
fseek($qqwry[‘fp’], $pos);
$data = fread($qqwry[‘fp’], 4);
}
// 判断是否存在详细地址信息
if($data[0] == chr(2)) {
$addr = unpack(‘L’, fread($qqwry[‘fp’], 3).chr(0))[1];
$length = unpack(‘C’, fread($qqwry[‘fp’], 1))[1];
$addrstr = fread($qqwry[‘fp’], $length);
} else {
$addrpos = $pos + 4;
$addrstr = ”;
while(($word = fread($qqwry[‘fp’], 2)) != “\0\0”) {
$addrpos += 2;
$addrstr .= $word;
}
}
// 关闭文件并返回查询结果
fclose($qqwry[‘fp’]);
// 分析地址信息
$cityInfo = [
‘province’ => ”,
‘city’ => ”,
‘district’ => ”,
];
if($addrstr != ”) {
$cityInfo = yzeAddress($addrstr, $provinces);
}
return $cityInfo;
}
“`
通过这个函数,我们可以传入一个 IP 地址并获取其所在的省市区信息。
四、分析省市区信息
我们需要对查询到的地址信息进行分析,获取到其对应的省市区信息。分析函数如下:
“`
// 分析详细地址信息
function yzeAddress($addrstr, $provinces) {
$cityInfo = [
‘province’ => ”,
‘city’ => ”,
‘district’ => ”,
];
$addrArr = explode(chr(0), $addrstr);
foreach($addrArr as $addr) {
if(mb_strpos($addr, ‘省’) !== false || mb_strpos($addr, ‘市’) !== false) {
if(mb_strpos($addr, ‘市’) !== false) {
$cityInfo[‘province’] = mb_substr($addr, 0, mb_strpos($addr, ‘市’) + 1, ‘UTF-8’);
} else {
$cityInfo[‘province’] = $addr;
}
} else {
$cityInfo[‘city’] = $addr;
foreach($provinces as $province) {
if(mb_strpos($cityInfo[‘province’], $province) !== false) {
$cityInfo[‘province’] = $province;
break;
}
}
}
}
return $cityInfo;
}
“`
分析函数将传入的地址信息进行分割,获取其中的省、市、区信息,并通过比对全国省市信息进行修正。通过这个函数,我们就可以将纯真数据库中获取到的地址信息转换成为易于阅读和理解的省市区信息。
五、使用
使用上述的三个函数,我们就可以轻松地在 PHP 中获取纯真数据库中的城市信息了。使用方法如下:
“`
$ip = ‘127.0.0.1’;
$cityInfo = queryCity($ip);
print_r($cityInfo);
“`
以上代码中,我们可以将 $ip 变量替换为需要查询城市信息的 IP 地址即可。
六、
通过本文的介绍,我们了解了如何。在实际开发中,我们可以使用这个功能来获取用户所在地信息,为用户提供更加精准的服务。当然,在使用纯真数据库时需要注意其数据的实时性和准确性。在使用时,建议定期更新纯真数据库文件,以保证数据的有效性。
相关问题拓展阅读:
获取ppq数据库的所有表名的代码:
?php
$server=’localhost’;
$user=’root’;
$pass=’12345′;
$dbname=’ppq’;
$conn=mysql_connect($server,$user,$pass);
if(!$conn)
die(“数据库系统连接失败!”);
$result=mysql_list_tables($dbname);
if(!$result)
die(“数据库连接失败!”);
while($row=mysql_fetch_row($result))
{
echo
$row.”态芦
“;
}
mysql_free_result($result);
?
mysql_list_tables
(PHP
3,
PHP
,
PHP
5)
mysql_list_tables
—
列出
MySQL
数据库中的表
说明
resource
mysql_list_tables
(
string
database
resource
link_identifier>)
mysql_list_tables()
接受一个数据库名并返回和
mysql_query()
函数很相似的一颤羡个茄闭拍结果指针。用
mysql_fetch_array()或者用mysql_fetch_row()来获得一个数组,数组的第0列就是数组名,当获取不到时
mysql_fetch_array()或者用mysql_fetch_row()返回
关于纯真数据库获取城市 php的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
成都创新互联建站主营:成都网站建设、网站维护、网站改版的网站建设公司,提供成都网站制作、成都网站建设、成都网站推广、成都网站优化seo、响应式移动网站开发制作等网站服务。
网站栏目:使用PHP获取纯真数据库中的城市信息(纯真数据库获取城市php)
网页地址:http://www.shufengxianlan.com/qtweb/news44/317194.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联