前提
- DBに直接アクセスさせたくない
- しかしDBの内容を読み込ませたい
- DBは1週間に一回更新があるかどうか
- データ量が1MBくらいと小さい
- 読み取り専用
この場合、DBのダンプ情報をリモートからアクセスできればやりたいことができる。
apiサーバ
api.php
if ($_SERVER["REMOTE_ADDR"] != "123.123.123.123"
&& $_SERVER["REMOTE_ADDR"] != "123.123.123.124") {
die("access denied.");
}
define('CACHE_FILE', 'api.cache');
// 30分以上前の場合、キャッシュを使う。
if (filemtime(CACHE_FILE) > strtotime('-30 minute')) {
echo "[quit] cache data already updated. retry after 30 minutes.";
die();
}
function encode($arr) {
return base64_encode(serialize($arr));
}
function decode($str) {
return unserialize(base64_decode($str));
}
DBの値を配列に格納しencode()
に通す。
- serializeするだけだと日本語が化けるのでbase64_encodeした。
- apiを利用する側は
decode()
を通せばよい。