[PHP]GeoIPでIPアドレスから国を判定する

php_program_top

この記事には広告を含む場合があります。

記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。

PHPで訪問者の国名を判定する方法

ウェブサイトを開発していると、

  • 多言語対応のサイトにて訪問者ごとに対応する言語で表示する
  • 所定の国のみで限定公開したい、または所定の国からのアクセスを遮断したい
  • 海外からのアクセスのときは、プログラムの処理を変えたい

などの理由により、サイトへの訪問者の国を判定したいときがあります。

PHPで国を判定する方法として2つの方法があります。

1つ目は、IPアドレスの管理団体である「APNIC(アジアのIP管理団体)」が提供する国別とIPアドレスの一覧を取得して、プログラムを自作する。

2つ目は、本記事で紹介するGeoIPを使用した方法になります。

 

GeoIP2-php のインストール

まずは composer を使用して「GeoIP2-php」をインストールします。

実行するサンプルコマンド

composer require geoip2/geoip2:~2.0

※composer コマンドが使用できないときは、composerへのパスを設定するか、
「php /(設置先パス)/composer.phar require geoip2/geoip2:~2.0」で composer を実行します。

サンプルコマンドの実行例

参考元URL
https://github.com/maxmind/GeoIP2-php

 

GeoIP のデータベースファイルの取得

composer でインストールしたファイルには、PHPで参照するデータベースファイルが見当たりません。そのため、GeoIP の提供元である maxmind 社のホームページで、「GeoLite2 Country」のデータベース「MaxMind DB バイナリー」をダウンロードします。

DBのダウンロード先
https://dev.maxmind.com/ja/geolite2/

check_country1

 

PHPにて国の判定プログラム

サンプルのフォルダ構成

(path)
 ┣ vendor (composerのインストール先)
 ┃ ┗ autoload.php
 ┗ htdocs
   ┣ GeoLite2-Country.mmdb
   ┗ getCountry.php

サンプルプログラム

「../vendor/autoload.php」のパスは自身の環境に合わせて下さい。

サンプルプログラムの実行結果

 

さいごに

IPアドレスからの国名の判定は、GeoIPを使えば簡単に実装できます。

ただ注意点として、GeoIPのデータベースのライセンスは、「クリエイティブ・コモンズ 表示-継承 3.0 非移植ライセンス」であり、使用したアプリ/ウェブにはライセンス表記を行う義務が発生します。もしライセンス表記をしたくないときは、GeoLite2 Country データベースは年間252米ドル、GeoLite2 City データベースは年間456米ドルで商用ライセンスを購入する必要がありますのでご注意ください。

また時間があれば、APNICからIPアドレスの一覧を取得して日本と日本以外の判定プログラムを用意して、ご紹介します。

 

 

ウェブプログラミングについては下記の本も参考になるので、スキルアップにお役立てください。

徳丸 浩(著)
ページ数: 688ページ
出版社:SBクリエイティブ
発売日:2018/06/21

出典:amazon