GeoIP2でIPアドレスからアクセス地域を取得したときの備忘録

電脳備忘録

「アクセスしたエリア(都道府県レベル)ごとに微妙に文言を変えて表示したい」という要望を受け対応したときの備忘録

IPアドレスから国や県などの地域をPHPで取得するにはMaxMindからフリーのDBを利用するらしいんですが、2019年末から個人情報差し出さないと使わせてくれないようです。
仕方ないので会員登録用に使ってるアドレスで会員登録し、都道府県を取得したかったので「GeoLite2-City」をダウンロード。

圧縮ファイルを解凍し、GeoLite2-City.mmdbを任意の場所にアップロード。

環境はxserverだったのでSSHでログイン。

インストールディレクトリに移動してGeoIP2 PHP APIをインストール。

$ composer require geoip2/geoip2:~2.0

composer.json, composer.lockファイルとvendorディレクトリが出来ていればインストールは成功。

今回は日本国内からのアクセス前提で「都道府県」が取得できればよかったので下のようなコードをかきました。
そのまま載せるわけにもいかないので、悪ふざけで某県からのアクセスの場合は有無を言わさずそこの県庁HPにリダイレクトするようなクソコードに書き換えました。
あの言い分だと、こちらはこういう仕組みで自衛するしかないんじゃないかな?

動作サンプルおいておきます。動作する・・・はず・・・。

<?php
require '/vendor/autoload.php';
use GeoIp2\Database\Reader;
//ダウンロードしたバイナリを指定
$reader = new Reader('./db/GeoLite2-City.mmdb');
//IPアドレスを指定
$accessarea = $reader->city($_SERVER['REMOTE_ADDR']);
//都道府県を取得
$prefectures =$accessarea->city->name;
?>
<?PHP if ($prefectures == "Kagawa") : ?>
<?php header('Location: https://www.pref.kagawa.lg.jp/'); ?>
<?PHP else : ?>
<?PHP
print('あなたは'.$accessarea->city->names['ja'].'からアクセスしていますね?'); ?>
<?PHP endif; ?>

日本国外からのアクセスだったら英語サイトにリダイレクトするとか色々使えそうですね。ただし、正確性が求められる場合は有料プランの利用が必須のようです。

広告

ブログの維持費に充てるでございます・・・。