Maxmind的GeoLite2大陆代码

时间:2018-06-09 15:52:12

标签: php geoip maxmind

我正在使用MaxMind的免费GeoLite2 database 根据他们的code,我可以获得该国家的ISO代码 print($record->country->isoCode . "\n"); // 'US'
但是我如何获得大陆代码? 我更具体地寻找欧盟检测。

2 个答案:

答案 0 :(得分:1)

<强> EU

欧盟(欧盟)国家名单如下:

  • AT,奥地利
  • BE,比利时
  • BG,Bulgaria
  • CR,克罗地亚
  • CY,塞浦路斯共和国
  • CZ,捷克共和国
  • DK,丹麦
  • EE,爱沙尼亚
  • FI,芬兰
  • FR,法国
  • DE,德国
  • GR,希腊
  • HU,匈牙利
  • IE,Ireland
  • IT,意大利
  • LV,拉脱维亚
  • LI,立陶宛
  • LU,Luxembourg
  • MT,马耳他
  • NL,荷兰
  • PL,波兰
  • PT,葡萄牙
  • RO,罗马尼亚
  • SK,斯洛伐克
  • SI,斯洛文尼亚
  • SP,西班牙
  • SE,瑞典
  • GB,英国

我使用的例子:

if (isset($_SERVER['GEOIP_COUNTRY_CODE'])) {
  $cc=$_SERVER['GEOIP_COUNTRY_CODE'];
} else {
  $cc='??';
}
$eu=array('AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'SP', 'SE', 'GB');
if (in_array($cc,$eu)) {
   //inside EU
} else {
   //outside EU
}

<强> EEA

根据您的目标(考虑到GDPR可以强制执行后的问题),您可能希望测试EEA(欧洲经济区)。

EEA是:

  • 所有欧盟成员
  • NO,挪威
  • IS,Iceland
  • LI,列支敦士登

这是我在完整geoip中使用的内容:

if (isset($_SERVER['GEOIP_COUNTRY_CODE'])) {
  $cc=$_SERVER['GEOIP_COUNTRY_CODE'];
} else {
  $cc='??';
}
$eea=array('AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'SP', 'SE', 'GB', 'NO', 'IS', 'LI');
if (in_array($cc,$eea)) {
   //inside EEA
} else {
   //outside EEA
}

特殊情况

您需要处理一些特殊情况,具体取决于您的预期用途:

部分欧盟,但拥有自己的ISO 2字母代码

  • GI,直布罗陀(〜英国)
  • AX,奥兰群岛(〜芬兰)

请注意,有更多这些,但他们没有自己的ISO国家/地区代码...

欧盟和欧洲经济区的这些部分,并有自己的2个字母的国家代码。

最外地区

  • GF,法属圭亚那(〜法国)
  • GP,瓜德罗普岛(〜法国)
  • MQ,马提尼克岛(〜法国)
  • YT,Mayotte(~France)
  • RE,Réunion(~France)
  • MF,Saint Martin(~France)

这些变得复杂,你应该真正阅读每一个因为你寻求定义欧盟的具体原因,如果它们进入或退出。还要注意,如果没有那么多新闻报道,这些往往会发生变化。

海外国家和地区

其中甚至更多,但在大多数用例中它们不应被视为欧盟的一部分,如果您有特殊原因,仍然会检查它们。

<强>飞地

这些往往没有自己的国家/地区代码,但有时出于某些目的,可能会对它们应用不同的规则。

例子是例如隔离的部分。德国或西班牙,但位于例如瑞士或摩洛哥。

<强> EFTA

完整性:瑞士(CH)既不是欧盟成员国也不是欧洲经济区成员国,但它是欧洲自由贸易联盟(EFTA)的成员。

微状态

列支敦士登是欧洲经济区的成员,但还有一些其他欧盟既不属于欧盟也不属于欧洲经济区。尽管如此,由于实际原因,他们确实有各种关系  与欧盟(例如成为欧元区的一部分,在申根区内,收取增值税等)

  • AD,安道尔
  • LI,列支敦士登
  • MC,Monaco
  • SM,San Marino
  • VC,梵蒂冈城

<强>洲

如果你确实在寻求大陆,你将需要增加更多的国家,你将不得不与不仅仅在欧洲的国家(如土耳其,俄罗斯)打交道。

Maxmind的“欧盟”国家/地区代码

Maxmind有时会使用国家代码“EU”,因为它无法确定它实际上是哪个国家/地区。这个“欧盟”指的是欧洲,而不是欧盟(实际上保留了欧盟国家代码)。

更多信息:

https://en.wikipedia.org/wiki/Special_member_state_territories_and_the_European_Union https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 https://en.wikipedia.org/wiki/Microstates_and_the_European_Union https://dev.maxmind.com/faq/what-are-the-eu-europe-and-ap-asia-pacific-entries/

答案 1 :(得分:1)

如果您只是在寻找该国是否是欧盟成员国,MaxMind provides this

$record->country->isInEuropeanUnion

如果你想要continent code,你可以使用:

$record->continent->code

但请注意,并非所有欧洲国家都是欧盟的一部分。