bitolaco/geoipcheck

v0.1.1 2015-01-19 09:07 UTC

This package is not auto-updated.

Last update: 2024-09-28 17:07:20 UTC


README

Latest Stable Version Total Downloads Latest Unstable Version License

这是一个简单的函数,它根据HTTP请求的位置打印不同的字符串。

它使用MaxMind GeoIP API for PHP。有关API的更多详细信息,请参阅https://github.com/maxmind/geoip-api-php

要求

您必须已安装Composer或下载它。有关更多信息,请访问getcomposer.org

您还必须安装GeoIP City数据库,因为我们无法由于许可证限制将其与代码打包。您的Linux发行版可能已包含PHP geo-ip扩展的软件包。如果您使用的是Ubuntu,操作很简单:

sudo apt-get install php5-geoip

有其他系统的说明?创建一个pull请求,我们将合并它。

还需要PHP 5.3或更高版本,主要是因为依赖于匿名函数。

安装

MaxMind API是通过Composer安装到此处的,并包含在此软件包中。如果您已经使用Composer,请将example.php中的require行更改为与您的Composer自动加载文件位置匹配。

请确保在您的composer.json文件中将它作为要求。

{
  "require": {
    "bitolaco/geoipcheck": "~0.1"
  }
}

请确保您的php包含该文件

require_once '/path/to/composer/autoload.php';

使用方法

使用方法非常简单。

$geoIp = new GeoIpCheck();

如果您使用的是不在以下位置之一的MaxMind数据库,您需要在初始化对象时输入数据库的路径。脚本会自动在这些位置中查找文件

/usr/local/share/GeoIP/GeoIP.dat
/usr/local/share/GeoIP/GeoLiteCity.dat
/usr/local/share/GeoIP/GeoIPCity.dat
/usr/share/GeoIP/GeoIP.dat
/usr/share/GeoIP/GeoLiteCity.dat
/usr/share/GeoIP/GeoIPCity.dat

如果您使用的是自定义位置,只需像这样指定它

$geoIp = new GeoIpCheck('/path/to/geoip/database.dat');

如果您想覆盖IP地址(即不使用请求的IP地址,只需将第一行更改为

$geoIp = new GeoIpCheck();
$geoIp->overrideRequestIp('<any valid ipv4 address>');

然后,要运行检查,指定搜索类型和匹配值。

$geoIp->check(
    'Name of city/cities/regions/etc.',
    'Type of search',
    function() { /* Callback to execute if the check is true.  */ },
    function() { /* Callback to execute if the check is false. */ }
);

有效的搜索类型包括

country_code, country_code3, city, latitude, longitude, area_code, metro_code, region, postal_code, dma_code, continent_code

有效的搜索值,第一个参数,可以是字符串、逗号分隔的字符串或数组。所有这些都是有效的。

$type = 'Boston';
$type = 'Boston,Cambridge';
$type = array('Boston', 'Cambridge');

整个示例,如果您想检查当前访客是否来自波士顿或剑桥

$geoIp = new GeoIpCheck();
$geoIp->check(
    'Boston,Cambridge',
    'city',
    function() { echo "You are not from Boston or Cambridge"; },
    function() { echo "You are from Boston or Cambridge"; }
);

如果最后一个请求的详细信息存储在GeoIpCheck::$lastResult变量中。所以您可以在脚本中的任何地方访问数据,如

$geoIp->lastRequest->city;
$geoIp->lastRequest->country_code;
$geoIp->lastRequest->area_code;
// And so forth...

完整示例

您可以在example/index.php文件中看到一个示例。它除了本存储库中的代码外没有其他外部要求,因此您可以使用内置的PHP web-server运行它。

待办事项

  • 添加基本单元测试。
  • 如果可用,将结果缓存在内存中(memcached、apc等)。
  • 如果可用,将整个数据库缓存在内存中。

建议

这是为某个客户构建的,您在这里看到的是原始版本。

有任何功能建议、错误或评论吗?在问题跟踪器中创建一个问题。