【PHP】GeoIP2でIPアドレスから国・地域名を取得する
そもそもGeoIP2とは?
GeoIP2はMaxMind社が提供するパッケージ。IPアドレスから国や地名、緯度・経度をはじめとした様々な情報を取得できる。
無料で使用できるが有償版と比べるとスペックでは劣り、更新頻度も低め。加えて商用で使用する際はライセンスの表記なども必要になる。
ちなみにAPIを利用する方法もあるが、今回はDBファイルをダウンロードする方法で試してみる。
IPアドレスから国・地域名を取得する方法
大まかな流れは以下の通り。
- GeoIP2のパッケージをインストールする
- データベースファイルをダウンロードする
- データベースを読み込む
- IPアドレスから地域情報を取得する
1. GeoIP2のパッケージをインストールする
まずはcomposerを利用してGeoIP2のパッケージをインストール。
上のようにメッセージが出力されればインストール完了。
そしてvendor
ディレクトリ下がこのようになっていればOK。
2. データベースファイルをダウンロードする
次に、公式サイトからGeoLite2のDBファイルをダウンロードしていく。
2-1. アカウントを作成する
「Sign Up for GeoLite2」をクリックしアカウントを作成開始。
必要事項を記入する。画像の通り、メアドまで入力すればOK。
すると入力したアドレス宛にメールが届くので、そこのURLからパスワードを設定しログインする。
ちなみに今回はお試しで利用するだけなので不要だが、商用で利用する際などにはライセンスキーの取得が必要になってくる。
2-2. データベースファイルをダウンロードする
まずはダウンロードページにアクセスしたいので、サイトのフッターメニューから「GeoLite2 Free Geolocation Data」をクリック。
既視感のある画面に来たら、今度はその中の「Download Files」をクリック。
するとダウンロードページに遷移するので、「GeoLite2-City.mmdb」「GeoLite2-Country.mmdb」のどちらかのzipファイルをダウンロード。今回は国名を取得したいので後者を選択する。
2-3. 解凍し配置する
ダウンロードしたzipファイルを解凍し、mmdb拡張子のDBファイルを適当なパスに配置してあげる。
3. データベースを読み込む
vendor
下のautoload.php
を読み込み、Reader
クラスのインスタンスを作成する。
4. IPアドレスから地域情報を取得する
IPアドレスを引数に指定してcity
メソッドを呼んでみる。
上のようにオブジェクトの中身がずらっと出力された。国名なども含まれてる。
てことでプロパティ名を指定して日本語で国名を出力してみる。
無事、国名が取得できた。
色々試してみたところ、IPアドレスによっては取得できない場合もある模様。やはり無料版だと有料版に比べ正確性に欠けるっぽい。