手册上的GeoIP扩展详解,按手册整理了一遍
手册中,"其它基本扩展->GeoIP",有一个GeoIP扩展,今天我们来研究下这个扩展:
简介:
GeoIP扩展允许你查找IP地址的位置。可以借助GeoIP获取:城市,州,国家,经度,纬度,以及其它信息,例如:ISP(网络服务提供商)和链接类型
安装/配置:
1.GeoIP扩展需要1.4.0以上的GeoIP C语言 库,我们需要获取,并自己编译安装。
2.默认情况下,我们仅有免费的GeoIP 国家和 GeoLite城市数据库的访问权限。想使用其它类型的数据库,得需要购买商业协议。(www.maxmind.com)
3.有人评论说,免费的GeoLite数据库,仅仅是精度上比商业版低点,但对于我们大多数的项目已经足够了。我们使用免费的就行
运行时配置:
geoip.custom_directory // 自定义geoIP的数据库路径
默认值是 "",使用的是编译时制定的路径,可以设置此配置,强制使用另一个不同的数据库路径
可能会出现的一个错误是:
PHP GeoIP: Required database not available at /usr/share/GeoIP/GeoIP.dat,未找到GeoIP.dat文件,我们可以下载它:
cd /usr/share/GeoIP/
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
gunzip GeoIP.dat.gz
这样就可以了,不需要重启任何服务
安装:
暂无,我看了一篇文章找不到了,各种安装方式。。。
反正大家得知道,geoip就是通过ip地址来查找其它信息:
安装了geoip库
还得下载 '.dat' 数据库,基本所有函数,都得从数据库中查找
咱们一般使用的是免费版,好多功能可能没
函数:
geoip_asnum_by_name(string $hostname)
获取IP地址关联的ASN(Autonomous System Numbers)
自治系统号,可查看知乎的问题:什么是 Autonomous System Number(自治系统号),这个东西怎么玩?地址:https://www.zhihu.com/question/21024981,有个大概理解就行了
1.$hostname
主机名或IP地址
2.返回值
成功返回ASN,在数据库中未发现此地址,返回false
3.实例:
echo geoip_asnum_by_name('www.baidu.com'); // ...
geoip_continent_code_by_name(string $hostname)
返回主机名或ip地址,对应的2个字母表示的 '洲码'(世界上有7大洲)
1.$hostname
查找的主机名或ip地址
2.返回值
成功返回 '洲码',数据库中未找到此地址,返回false
'洲码' 列表:
AF - Africa
AN - Antarctica
AS - Asia
EU - Europe
NA - Norce America
OC - Oceania
SA - Source America
geoip_country_code_by_name(string $hostname)
返回主机名或ip地址,对应的2个字母表示的 '国家码'
1.$hostname
查找的主机名或ip地址
2.返回值
成功返回2个字母表示的ISO国家码,在数据库中未发现此地址,返回false
// CN - China
完整的国家码列表,可查看:
ISO Country Code - 标准国家码(http://blog.csdn.net/beyond__devil/article/details/52837777)
geoip_country_code3_by_name(string $hostname) // 获取3个字母表示的ISO国家码。例如:USA
geoip_country_name_by_name(string $hostname) // 获取完整的国家名。例如:China
geoip_database_info([int $database = GEOIP_COUNTRY_EDITION])
返回二进制文件中,定义的相应 GeoIP 数据库版本,如果调用函数时,未传递参数,返回 GeoIP Free Country 版本
1.$database
数据库类型,是个整型。可查看常量列表,GEOIP_*_EDITION 系列常量
2.返回值
成功返回相应的数据版本,错误返回NULL
geoip_db_avail(int $database)
检查 GeoIP 数据库是否有效,并且在硬盘上是可以打开的。
It does not indicate if the file is a proper database, only if it is readable.
1.$database
数据库类型,是个整型。可查看常量列表,GEOIP_*_EDITION 系列常量
2.返回值
数据库存在,返回true,不存在返回false,错误返回null
geoip_db_filename(int $database)
返回相应的 GeoIP 数据库文件名
It does not indicate if the file exists or not on disk, only where the library is looking for the database.
1.$database
数据库类型,是个整型。可查看常量列表,GEOIP_*_EDITION 系列常量
2.返回值
成功返回相应的数据库文件名,错误返回NULL
3.实例:
echo geoip_db_filename(GEOIP_COUNTRY_EDITION); // /usr/share/GeoIP/GeoIP.dat
geoip_db_get_all_info()
返回所有 GeoIP 数据库类型的详细信息,返回的是一个多维数组。
即使没有数据库被安装,该函数也是可用的。它将仅仅列出它们,显示不可用
返回的关联数组的下标列表如下:
available - boolean类型,表明数据库是否可用(查看 geoip_db_avail())
description - 数据库描述
filename - 硬盘上数据库文件名(查看 geoip_db_filename())
实例:
<?php$infos = geoip_db_get_all_info();if (is_array($infos)) {var_dump($infos);}?>
输出:
array(11) {[1]=>array(3) {["available"]=>bool(true)["description"]=>string(21) "GeoIP Country Edition"["filename"]=>string(32) "/usr/share/GeoIP/GeoIP.dat"}[ ... ][11]=>array(3) {["available"]=>bool(false)["description"]=>string(25) "GeoIP Domain Name Edition"["filename"]=>string(38) "/usr/share/GeoIP/GeoIPDomain.dat"}}
有一点,需注意下:
最外层数组的索引下标,表示的是不同的数据库类型常量。
geoip_domain_by_name(string $hostname)
返回关联的主机名或IP地址的二级域名
该函数目前仅对商业'GeoIP Domain Edition'有效,如果发现对应的数据库不存在,则显示一个警告
1.$hostname
查找的主机名或ip地址
2.返回值
成功返回相应的域名,在数据库中未发现地址,返回false
geoip_id_by_name(string $hostname)
返回对应的主机名或IP地址的因特网连接类型
返回值是数字,是下面常量中的一个:
GEOIP_UNKNOWN_SPEED
GEOIP_DIALUP_SPEED
GEOIP_CABLEDSL_SPEED
GEOIP_CORPORATE_SPEED
1.$hostname
查找的主机名或IP地址
2.返回值
返回连接类型
3.手册上实例:
<?php$netspeed = geoip_id_by_name('www.example.com');echo 'The connection type is ';switch ($netspeed) {case GEOIP_DIALUP_SPEED:echo 'dial-up';break;case GEOIP_CABLEDSL_SPEED:echo 'cable or DSL';break;case GEOIP_CORPORATE_SPEED:echo 'corporate';break;case GEOIP_UNKNOWN_SPEED:default:echo 'unknown';}?>
geoip_isp_by_name(string $hostname) // 获取对应的主机名或IP地址的ISP(Internet Service Provider-网络运营商)名字
geoip_netspeedcell_by_name(string $hostname)
返回主机名或IP地址对应的因特网连接类型和连接速度
该函数只能用于 GeoIP库 1.4.8以后
该函数目前仅对购买了商业 "GeoIP NetSpeedCell Edition" 的用户有效,如果发现对应的数据库不存在,则显示一个警告
返回一个字符串,常见的值是:
Cable/DSL
Dialup
Cellular
Corporate
1.$hostname
查找的主机名或IP地址
2.返回值
成功返回连接speed,如果在数据库中未找到地址,返回false
geoip_org_by_name(string $hostname)
返回主机名或IP地址,对应的组织名。
该函数目前仅对购买了商业 "GeoIP Organization, ISP or AS Edition" 的用户有效,如果发现对应的数据库不存在,则显示一个警告
1.$hostname
查找的主机名或IP地址
2.返回值
成功返回组织名,如果在数据库中未找到地址,返回false
geoip_record_by_name(string $hostname)
返回主机名或IP地址对应的在 GeoIP 数据库中的详细的城市信息
该函数对 'GeoLite City Edition' 和 商业'GeoIP City Edition' 都是有效的,如果发现对应的数据库不存在,则显示一个警告。
返回的关联数组的下标列表如下:
continent_code - 2个字母的 '洲码'
country_code - 2个字母的 '国家码'(查看 geoip_country_code_by_name())
country_code3 - 3个字母的 '国家码'(查看 geoip_country_code3_by_name())
country_name - 国家名(查看 geoip_country_name_by_name())
region - 地区码(例如:CA-California)
city - 城市
postal_code - 邮编,FSA或Zip码
latitude - 经度
longtitude - 纬度
dma_code - Designated Market Area code(仅仅美国和加拿大)
area_code - PSTN 区域码(例如:212)
geoip_region_by_name(string $hostname)
返回主机名或IP地址对应的国家和地区。
该函数目前仅对购买了商业 "GeoIP Region Edition" 的用户有效,如果发现对应的数据库不存在,则显示一个警告
返回的关联数组的下标列表如下:
country_code - 2个字母的 '国家码'(查看 geoip_country_code_by_name())
region - 地区码(例如:CA-California)
geoip_region_name_by_code(string $country_code, string $region_code)
根据国家码和地区码组合,获取地区名
在美国,地区码对应每个州的2个字母缩写。在加拿大,地区码对应2个字母的省份或区域码,由加拿大邮政制定的
对于世界上的其它国家,GeoIP 使用 FIPS 10-4 编码代表地区。可查看完整的列表: http://geolite.maxmind.com/download/geoip/misc/region_codes.csv
GeoIP扩展库自1.4.1以后,该函数都是有效的,数据的获取是直接来自 GeoIP扩展库,而不是从任何数据库中获取
1.$country_code
2个字母的国家码(查看 geoip_country_code_by_name())
2.$region_code
2个字母(或数字)的地区码(查看 geoip_region_by_name())
3.返回值
成功返回地区名,如果国家码和地区码组合未找到,返回false
4.实例:
美国/加拿大
echo geoip_region_name_by_code('CA', 'QC'); // Quebec
日本 - (原谅我,手册中的实例是日本,我暂未测试)
geoip_region_name_by_code('JP', '01'); // Aichi
中国 - 测试了哈
geoip_region_name_by_code('CN', '01'); // Anhui
geoip_time_zone_by_country_and_region(string $country_code[, string $region_code]) // 根据国家码和地区码组合,返回对应的时区
1.$country_code
2个字母的国家码(查看 geoip_country_code_by_name())
2.$region_code
2个字母(或数字)的地区码(查看 geoip_region_by_name())
3.返回值
成功返回时区,如果国家码和地区码组合未找到,返回false
4.实例:
geoip_region_name_by_code('CN', '23'); // Asia/Shanghai(23-表示上海)
geoip_setup_custom_directory(string $path)
改变 GeoIP 数据库的默认目录,等同于改变 'getip.custom_directory' 的配置
1.$path
硬盘上 GeoIP 数据库的全路径
2.实例:
<?phpgeoip_setup_custom_directory('/some/other/path'); // 改变路径print geoip_db_filename(GEOIP_COUNTRY_EDITION); // 输出:/some/other/path/GeoIP.dat?>
手册上的GeoIP扩展详解,按手册整理了一遍相关推荐
- Linux中man手册的安装以及使用详解
Linux中man手册的安装以及使用详解 linux中man手册的安装以及使用详解 man手册是什么 man手册是干嘛的 man手册如何安装 man手册如何使用 举例讲解 我们来看一下man手册的目录 ...
- ecshop二次开发手册,ECSHOP文件结构,ECSHOP目录详解
Ecshop文件结构 :ecshop二次开发手册,ECSHOP文件结构,ECSHOP目录详解 /* ECShop 最新程序 的结构图及各文件相应功能介绍 ECShop文件结构目录 ┣ activity ...
- fileupload的回调方法_jQuery File Upload文件上传插件使用详解
本篇教程介绍了jQuery File Upload文件上传插件使用详解,希望阅读本篇文章以后大家有所收获,帮助大家对jQuery的理解更加深入. < jQuery File Upload 是一个 ...
- fileinput 时间_JavaScript_Bootstrap Fileinput文件上传组件用法详解,最近时间空余,总结了一些关...
最近时间空余,总结了一些关于bootstrap fileinput组件的一些常见用法,特此分享到phpstudy平台,供大家参考,同时也方便以后的查找.本文写的不好还请见谅. 一.效果展示 1.原始的 ...
- Kubernetes上的负载均衡详解
如果您的应用程序是面向大量用户.会吸引大量流量,那么一个不变的目标一定是在高效满足用户需求的同时.不让用户感知到任何类似于"服务器繁忙!"的情况.这一诉求的典型解决方案是横向扩展部 ...
- Linux操作系统之—所有端口详解大全手册
Linux操作系统之-端口详解大全手册 0|无效端口,通常用于分析操作系统 1|传输控制协议端口服务多路开关选择器 2|管理实用程序 3|压缩进程 5|远程作业登录 7|回显 9|丢弃 ...
- mac linux win三系统安装教程,macbookpro上安装三系统详解教程(macosxwindowslinuxubuntu).doc...
macbookpro上安装三系统详解教程(macosxwindowslinuxubuntu) macbook pro上安装三系统详解教程(mac os x+windows+linux ubuntu) ...
- PHP中cal_days_in_month函数和calendar扩展详解
PHP中cal_days_in_month函数和calendar扩展详解 问题: 在开发中无意间发现cal_days_in_month函数不可使用.然后就开始研究学习. 1.cal_days_in_m ...
- Linux上的free命令详解
Linux上的free命令详解 转自: http://www.cnblogs.com/coldplayerest/archive/2010/02/20/1669949.html 解释一下Linux上f ...
最新文章
- oracle网站注入,oracle注入,utl_http方法
- 力扣(LeetCode)刷题,简单题(第12期)
- 【数字信号处理】相关函数 ( 有限信号 | 有限信号的自相关函数 )
- date new 转换时区_Pandas 时间序列 时区控制
- wxWidgets:wxGridUpdateLocker类用法
- cmd连接mysql连接:mysql-h主机地址-u用户名-p用户密码(注:u与root可以不用加)
- springboot 项目输出 sql 到控制台、 SpringBoot 中 Mybatis 打印 sql
- 选择排序 - python实现详解
- nvidia-smi每0.1s实时显示显存使用情况,且数字变化处有白底
- vue组件挂载到全局方法
- 西门子s7-200smart——2.cpu选型
- 为什么没什么人玩呢?凰华学院主校剧情有感
- 《二代征信》与你的生活息息相关 (1)
- 轻量级java框架 light-4j
- 洛谷P5633 最小度限制生成树 题解
- Linux编程技术总结
- 29岁的人生并不是那么平平淡淡_20190308
- 自动更新+淘客+电影网站PHP源码+手机版,可对接微信公众号带会员收费系统
- Simulink代码生成: Relay模块及其代码
- python写桌面软件如何实现自动升级