目次
サンプル・プログラムの実行例
サンプル・プログラムのダウンロード
| ip2address.php | サンプル・プログラム本体。 |
| pahooGeoCode.php | 住所・緯度・経度に関わるクラス pahooGeoCode。 使い方は「PHPで住所・ランドマークから最寄り駅を求める」「PHPで住所・ランドマークから緯度・経度を求める」などを参照。include_path が通ったディレクトリに配置すること。 |
| pahooInputData.php | データ入力に関わる関数群。 使い方は「数値入力とバリデーション」「文字入力とバリデーション」などを参照。include_path が通ったディレクトリに配置すること。 |
| バージョン | 更新日 | 内容 |
|---|---|---|
| 1.1.0 | 2025/08/13 | .pahooEnv 導入 |
| 1.0.0 | 2022/12/31 | 初版 |
| バージョン | 更新日 | 内容 |
|---|---|---|
| 6.8.0 | 2025/08/10 | アクセスキーなどを ".env" に分離 |
| 6.7.1 | 2025/07/26 | jsLine_Gmap() - bug-fix |
| 6.7.0 | 2025/07/20 | drawJSmap,drawGMap -- 引数 $markerLevel 追加 |
| 6.6.0 | 2025/07/19 | drawJSmap,drawGMap,drawLeaflet -- マップ中心マーカー表示引数を追加 |
| 6.5.0 | 2025/06/14 | GoogleMaps JavaScript APIの変更に対応 |
| バージョン | 更新日 | 内容 |
|---|---|---|
| 2.0.1 | 2025/08/11 | getParam() bug-fix |
| 2.0.0 | 2025/08/11 | pahooLoadEnv() 追加 |
| 1.9.0 | 2025/07/26 | getParam() 引数に$trim追加 |
| 1.8.1 | 2025/03/15 | validRegexPattern() debug |
| 1.8.0 | 2024/11/12 | validRegexPattern() 追加 |
サンプル・プログラムの流れ
準備:PHP の https対応
Windowsでは、"php.ini" の下記の行を有効化する。
extension=php_openssl.dllLinuxでは --with-openssl=/usr オプションを付けて再ビルドする。→OpenSSLインストール手順
これで準備は完了だ。
準備:pahooGeoCode クラス
pahooGeoCode.php
40: class pahooGeoCode {
41: public $items; // 検索結果格納用
42: public $error; // エラー・フラグ
43: public $errmsg; // エラー・メッセージ
44: public $hits; // 検索ヒット件数
45: public $webapi; // 直前に呼び出したWebAPI URL
46:
47: // -- 以下のデータは .env ファイルに記述可能
48: // Google Cloud Platform APIキー
49: // https://cloud.google.com/maps-platform/
50: // ※Google Maps APIを利用しないのなら登録不要
51: public $GOOGLE_API_KEY_1 = ''; // HTTPリファラ用
52: public $GOOGLE_API_KEY_2 = ''; // IP制限用
53: public $GOOGLE_MAP_ID = ''; // GoogleMaps ID
54:
55: // Yahoo! JAPAN Webサービス アプリケーションID
56: // https://e.developer.yahoo.co.jp/register
57: // ※Yahoo! JAPAN Webサービスを利用しないのなら登録不要
58: public $YAHOO_APPLICATION_ID = '';
59:
60: // OSM Nominatim Search API利用時に知らせるメールアドレス
61: // https://wiki.openstreetmap.org/wiki/JA:Nominatim#.E6.A4.9C.E7.B4.A2
62: // ※OSM Nominatim Search APIを利用しないのなら登録不要
63: public $NOMINATIM_EMAIL = '';
64:
65: // IP2Location.io APIキー
66: // https://www.ip2location.io/
67: // ※IP2Location.ioを利用しないのなら登録不要
68: public $IP2LOCATION_API_KEY = '';
PHPのクラスについては「PHPでクラスを使ってテキストの読みやすさを調べる」を参照されたい。
地図や住所検索として Google を利用するのであれば Google Cloud Platform APIキー とマップID が必要で、その入手方法は「Google Cloud Platform - WebAPIの登録方法」を、Yahoo!JAPAN を利用するのであれば Yahoo! JAPAN Webサービス アプリケーションIDが必要で、その入手方法は「Yahoo!JAPAN デベロッパーネットワーク - WebAPIの登録方法」を、IP2Location.ioを利用するのであれば「PHPでIPアドレスやホスト名から住所を求める」を、それぞれ参照されたい。
PHPのクラスについては「PHPでクラスを使ってテキストの読みやすさを調べる」を参照されたい。
準備:pahooInputData 関数群
また、各種クラウドサービスに登録したときに取得するアカウント情報、アプリケーションパスワードなどを登録した .pahooEnv ファイルから読み込む関数 pahooLoadEnv を備えている。こちらについては、「各種クラウド連携サービス(WebAPI)の登録方法」をご覧いただきたい。
準備:地図サービスの選択
住所検索サービスは、Google、Yahoo!JAPAN、HeartRails Geo APIから選べる。あらかじめ、定数 GEOSERVICE に値を設定すること。
逆ジオコーディングサービスは、Google、Yahoo!JAPAN、HeartRails Geo API、簡易ジオコーディングサービスから選べる。あらかじめ、定数 REVGEOSERVICE に値を設定すること。
解説:IP2Location.io による位置情報取得
| URL |
|---|
| https://api.ip2location.io/ |
| フィールド名 | 要否 | 内 容 |
|---|---|---|
| key | 必須 | IP2LOCATION.IO IP GEOLOCATION APIを利用するためのアプリケーション・キー |
| ip | 必須 | 検索するIPアドレス(IPv4またはIPv6) |
| format | 省略可能 | 出力書式。jsonまたはxml |
| lang | 省略可能 | 言語。ISO639-1による。日本なら ja |
解説:IP2LOCATION.IO IP GEOLOCATION APIの呼び出し
pahooGeoCode.php
2640: /**
2641: * IP2Location.ioを用いてIPアドレスから緯度・経度を求める
2642: * @param string $ip IPアドレス
2643: * @return array($latitude, $longitude) 緯度, 経度(世界測地系,10進数の度表記)
2644: */
2645: function ip2address($ip) {
2646: $res = FALSE;
2647:
2648: // IP2Location.io呼び出し
2649: $url = 'https://api.ip2location.io/?key=' . $this->IP2LOCATION_API_KEY . '&ip=' . $ip . '&format=json';
2650: $this->webapi = $url;
2651: $json = @file_get_contents($url, FALSE);
2652:
2653: // レスポンス・チェック
2654: if ($json == FALSE) {
2655: $this->error = TRUE;
2656: $this->errmsg = 'ip2locationにアクセスできません';
2657: } else {
2658: // APIからの応答取得
2659: if ($this->isphp7over()) {
2660: $arr = @json_decode($json, FALSE, 512, JSON_BIGINT_AS_STRING);
2661: } else {
2662: $arr = @json_decode($json, FALSE, 512);
2663: }
2664: if (isset($arr->latitude) && isset($arr->longitude)) {
2665: $res = array((double)$arr->latitude, (double)$arr->longitude);
2666: } else {
2667: $this->error = TRUE;
2668: $this->errmsg = 'IPアドレスが見つかりません';
2669: }
2670: }
2671:
2672: return $res;
2673: }
解説:メイン・プログラム
ip2address.php
295: // IPアドレスはREMOTE_ADDRから取得
296: $ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '';
297: if (is_ipadr($ip) == FALSE) $ip = '';
298: if ($ip == '') $ip = DEF_QUERY;
ip2address.php
322: // ホスト名→IPアドレス変換を実行する
323: if (($host = is_host($query)) != FALSE) {
324: $ip = gethostbyname($host);
325: } else {
326: $ip = $query;
327: }
ip2address.php
337: // エラーがなければ緯度・経度に代入
338: if ($res != FALSE) {
339: $latitude = $res[0];
340: $longitude = $res[1];
341: // 緯度・経度から住所を取得
342: $arr = $pgc->getAddress3($latitude, $longitude, REVGEOSERVICE);
343: if ($arr != FALSE) {
344: // 住所は都道府県+市町村
345: $address = $arr['prefecture'] . $arr['city'];
346: // マップに表示する情報ウィンドウの内容
347: $description = "IPアドレス:{$ip}<br />住所:{$address}<br />緯度:{$latitude},経度:{$longitude}";
348: $items[1] = array(
349: 'latitude' => $latitude,
350: 'longitude' => $longitude,
351: 'title' => '',
352: 'description' => $description
353: );
354: }
355: } else {
356: $errmsg = $pgc->geterror();
357: }
ここでは IP2Location.io の無償ライセンスを利用していることから位置情報の精度が低いため、住所として市町村名まで取得するようにした。
参考サイト
- IP2Location.io
- WebAPIの登録方法:ぱふぅ家のホームページ
- PHPで住所・ランドマークから緯度・経度を求める:ぱふぅ家のホームページ
- IPアドレスとドメイン名を相互変換する:ぱふぅ家のホームページ
- PHPでユーザー・アクセス情報を表示する:ぱふぅ家のホームページ
- PHPで緯度・経度から住所を求める:ぱふぅ家のホームページ

これと、Googleや地理院地図、オープンストリートマップの地図サービスをクラウド連携することで、アクセスしているIPアドレスやホスト名から住所を求めるPHPプログラムを作ってみることにする。
(2025年8月13日).pahooEnv 導入
(2025年6月14日)GoogleMaps JavaScript APIの変更に対応した.