手册上的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.实例:
            <?php
                geoip_setup_custom_directory('/some/other/path');   // 改变路径
                print geoip_db_filename(GEOIP_COUNTRY_EDITION);     // 输出:/some/other/path/GeoIP.dat
            ?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值