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

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

php_program_top

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

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

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

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

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

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

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

Advertisement

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アドレスの一覧を取得して日本と日本以外の判定プログラムを用意して、ご紹介します。

Advertisement

web開発カテゴリの最新記事