手册中,"其它基本扩展->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扩展详解,按手册整理了一遍相关推荐

  1. Linux中man手册的安装以及使用详解

    Linux中man手册的安装以及使用详解 linux中man手册的安装以及使用详解 man手册是什么 man手册是干嘛的 man手册如何安装 man手册如何使用 举例讲解 我们来看一下man手册的目录 ...

  2. ecshop二次开发手册,ECSHOP文件结构,ECSHOP目录详解

    Ecshop文件结构 :ecshop二次开发手册,ECSHOP文件结构,ECSHOP目录详解 /* ECShop 最新程序 的结构图及各文件相应功能介绍 ECShop文件结构目录 ┣ activity ...

  3. fileupload的回调方法_jQuery File Upload文件上传插件使用详解

    本篇教程介绍了jQuery File Upload文件上传插件使用详解,希望阅读本篇文章以后大家有所收获,帮助大家对jQuery的理解更加深入. < jQuery File Upload 是一个 ...

  4. fileinput 时间_JavaScript_Bootstrap Fileinput文件上传组件用法详解,最近时间空余,总结了一些关...

    最近时间空余,总结了一些关于bootstrap fileinput组件的一些常见用法,特此分享到phpstudy平台,供大家参考,同时也方便以后的查找.本文写的不好还请见谅. 一.效果展示 1.原始的 ...

  5. Kubernetes上的负载均衡详解

    如果您的应用程序是面向大量用户.会吸引大量流量,那么一个不变的目标一定是在高效满足用户需求的同时.不让用户感知到任何类似于"服务器繁忙!"的情况.这一诉求的典型解决方案是横向扩展部 ...

  6. Linux操作系统之—所有端口详解大全手册

    Linux操作系统之-端口详解大全手册 0|无效端口,通常用于分析操作系统  1|传输控制协议端口服务多路开关选择器  2|管理实用程序  3|压缩进程  5|远程作业登录  7|回显  9|丢弃  ...

  7. mac linux win三系统安装教程,macbookpro上安装三系统详解教程(macosxwindowslinuxubuntu).doc...

    macbookpro上安装三系统详解教程(macosxwindowslinuxubuntu) macbook pro上安装三系统详解教程(mac os x+windows+linux ubuntu) ...

  8. PHP中cal_days_in_month函数和calendar扩展详解

    PHP中cal_days_in_month函数和calendar扩展详解 问题: 在开发中无意间发现cal_days_in_month函数不可使用.然后就开始研究学习. 1.cal_days_in_m ...

  9. Linux上的free命令详解

    Linux上的free命令详解 转自: http://www.cnblogs.com/coldplayerest/archive/2010/02/20/1669949.html 解释一下Linux上f ...

最新文章

  1. oracle网站注入,oracle注入,utl_http方法
  2. 力扣(LeetCode)刷题,简单题(第12期)
  3. 【数字信号处理】相关函数 ( 有限信号 | 有限信号的自相关函数 )
  4. date new 转换时区_Pandas 时间序列 时区控制
  5. wxWidgets:wxGridUpdateLocker类用法
  6. cmd连接mysql连接:mysql-h主机地址-u用户名-p用户密码(注:u与root可以不用加)
  7. springboot 项目输出 sql 到控制台、 SpringBoot 中 Mybatis 打印 sql
  8. 选择排序 - python实现详解
  9. nvidia-smi每0.1s实时显示显存使用情况,且数字变化处有白底
  10. vue组件挂载到全局方法
  11. 西门子s7-200smart——2.cpu选型
  12. 为什么没什么人玩呢?凰华学院主校剧情有感
  13. 《二代征信》与你的生活息息相关 (1)
  14. 轻量级java框架 light-4j
  15. 洛谷P5633 最小度限制生成树 题解
  16. Linux编程技术总结
  17. 29岁的人生并不是那么平平淡淡_20190308
  18. 自动更新+淘客+电影网站PHP源码+手机版,可对接微信公众号带会员收费系统
  19. Simulink代码生成: Relay模块及其代码
  20. python写桌面软件如何实现自动升级

热门文章

  1. 当乐app官方下载android,当乐App
  2. 关于uniapp打包生成apk证书的制作
  3. 混合开发架构|Android工程集成React Native、Flutter、ReactJs
  4. 园林智能灌溉方案优势
  5. 哈希表查找——成功和不成功时的平均查找长度
  6. Python包管理工具PIP常用命令详解
  7. 动物需要更多的自由,而不是更大的笼子
  8. C语言编写的坦克大战exe小游戏
  9. CORBA是什么?用途是什么?
  10. vector删除元素