サンプル・プログラム:実行例

住所(必須)、目的地、目的地URLを入力し「作成」ボタンをクリックすることで、画面下段のようにGoogleマップ(静止画)と、目的地へのリンクを表示する。そして、これを表示するためのHTMLをtextarea内に表示する。
また、画面の表示幅、表示高、地図の拡大率を指定できるようになっている。
目次
サンプル・プログラム
getGoogleMapStd.php | サンプル・プログラム本体。 |
pahooGeoCode.php | 住所・緯度・経度に関わるクラス pahooGeoCode。 使い方は「PHPで住所・ランドマークから最寄り駅を求める」「PHPで住所・ランドマークから緯度・経度を求める」などを参照。include_path が通ったディレクトリに配置すること。 |
準備:pahooGeoCode クラス
37: class pahooGeoCode {
38: var $items; //検索結果格納用
39: var $error; //エラー・フラグ
40: var $errmsg; //エラー・メッセージ
41: var $hits; //検索ヒット件数
42: var $webapi; //直前に呼び出したWebAPI URL
43:
44: //Google Cloud Platform APIキー
45: //https://cloud.google.com/maps-platform/
46: //※Google Maps APIを利用しないのなら登録不要
47: var $GOOGLE_API_KEY_1 = '**************************'; //HTTPリファラ用
48: var $GOOGLE_API_KEY_2 = '**************************'; //IP制限用
49:
50: //Yahoo! JAPAN Webサービス アプリケーションID
51: //https://e.developer.yahoo.co.jp/register
52: //※Yahoo! JAPAN Webサービスを利用しないのなら登録不要
53: var $YAHOO_APPLICATION_ID = '*****************************';
クラスについては「PHPでクラスを使ってテキストの読みやすさを調べる」を参照されたい。

地図や住所検索として Google を利用するのであれば、Google Cloud Platform APIキー が必要で、その入手方法は「Google Cloud Platform - WebAPIの登録方法」を、Yahoo!JAPAN を利用するのであれば、Yahoo! JAPAN Webサービス アプリケーションIDが必要で、その入手方法は「Yahoo!JAPAN デベロッパーネットワーク - WebAPIの登録方法」を、それぞれ参照されたい。
サンプル・プログラムの流れ

解説:GoogleMaps staticmap
解説:パラメータの取得
ここでは、パラメータを受け取る際のバリデーション処理について説明する。

本プログラムは、HTML FORMでパラメータを入力し、自分自身(スクリプト)を呼び出すものであるが、悪意のある第三者が悪意のあるパラメータを使ってスクリプトを呼び出すかもしれない。そこで、パラメータがプログラムに悪影響を及ぼさないかどうかチェックする必要がある。
データのバリデーション機能は、PEARのようなフレームワークに用意されているのだが、ここでは、整数をチェックする getParam_validateInt と文字列をチェックする getParam_validateStr という2つのユーザー関数を用意することにした。
179: /**
180: * 指定したパラメータを取り出す(整数バリデーション付き)
181: * @param string $key パラメータ名(省略不可)
182: * @param int $def デフォルト値(省略可)
183: * @param int $min 最小値(省略可)
184: * @param int $max 最大値(省略可)
185: * @return int 値/FALSE
186: */
187: function getParam_validateInt($key, $def='', $min=0, $max=9999) {
188: //パラメータの存在チェック
189: if (isset($_GET[$key])) $param = $_GET[$key];
190: else if (isset($_POST[$key])) $param = $_POST[$key];
191: else $param = $def;
192: //整数チェック
193: if (preg_match('/^[0-9\-]+$/', $param) == 0) return FALSE;
194: //最小値・最大値チェック
195: if ($param < $min || $param > $max) return FALSE;
196:
197: return $param;
198: }
- パラメータが存在するかどうか
- 整数かどうか
- 指定した最大値・最小値の範囲にあるかどうか

「整数かどうか」のチェックでは、組み込み関数 is_int を使おうと考えたが、HTML FORM からの入力を判定できない(文字列と認識してしまう)ため、 preg_match により正規表現で判定することにした。
200: /**
201: * 指定したパラメータを取り出す(文字列バリデーション付き)
202: * @param string $key パラメータ名(省略不可)
203: * @param bool $auto TRUE=自動コード変換あり/FALSE=なし(省略時:TRUE)
204: * @param int $def デフォルト値(省略可)
205: * @param int $min 文字列長・最短(省略可)
206: * @param int $max 文字列長・最長(省略可)
207: * @return string 文字列/FALSE
208: */
209: function getParam_validateStr($key, $auto=TRUE, $def='', $min=3, $max=80) {
210: //パラメータの存在チェック
211: if (isset($_GET[$key])) $param = $_GET[$key];
212: else if (isset($_POST[$key])) $param = $_POST[$key];
213: else $param = $def;
214: if ($auto) $param = mb_convert_encoding($param, INTERNAL_ENCODING, 'auto');
215: $param = htmlspecialchars(strip_tags($param)); //タグを除く
216: //文字列長チェック
217: $len = mb_strlen($param);
218: if ($len < $min || $len > $max) return FALSE;
219:
220: return $param;
221: }
- パラメータが存在するかどうか
- 指定した最長値・最短値の範囲にあるかどうか
チェック工程のいずれかで異常が発生した場合には '' を返す。
(2021年10月10日)PHP8対応,リファラ・チェック改良など