bitolaco / geoipcheck
Requires
- php: >=5.3.0
- ext-geoip: ~1.1
Requires (Dev)
This package is not auto-updated.
Last update: 2024-09-28 17:07:20 UTC
README
这是一个简单的函数,它根据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等)。
- 如果可用,将整个数据库缓存在内存中。
建议
这是为某个客户构建的,您在这里看到的是原始版本。
有任何功能建议、错误或评论吗?在问题跟踪器中创建一个问题。