こんにちは、 @dz_ こと大平かづみです。
Prologue - はじめに
試用版 Azure Web Apps で WordPress のテンプレートを使用した場合のデータベースについて観察してみました。
どうやら、Azure Web Apps の MySQL In App を使うようです。(・ω・)ノ
試用版 Azure Web Apps の WordPress のデータベースをみてみる
試しに、試用版の Web Apps で、 WordPress のテンプレートを選択して作成してみます。作成した WordPress をひらくと、初回の管理者情報を入力した後、データベースの設定ができていないという警告が表示されます。
ですが、その警告を無視して記事を書いてみると、ちゃんと保存されます!
データベースは?
どういうことかしら?
wp-config.php
のデータベース設定をみてみましょう。
実は、 MySQL In App と呼ばれる Azure Web Apps に内蔵された MySQL へ接続する処理が差し込まれているのでした。
// ... <略> ...
$connectstr_dbhost = '';
$connectstr_dbname = '';
$connectstr_dbusername = '';
$connectstr_dbpassword = '';
foreach ($_SERVER as $key => $value) {
if (strpos($key, "MYSQLCONNSTR_") !== 0) {
continue;
}
$connectstr_dbhost = preg_replace("/^.*Data Source=(.+?);.*$/", "\\1", $value);
$connectstr_dbname = preg_replace("/^.*Database=(.+?);.*$/", "\\1", $value);
$connectstr_dbusername = preg_replace("/^.*User Id=(.+?);.*$/", "\\1", $value);
$connectstr_dbpassword = preg_replace("/^.*Password=(.+?)$/", "\\1", $value);
}
// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', $connectstr_dbname);
/** MySQL database username */
define('DB_USER', $connectstr_dbusername);
/** MySQL database password */
define('DB_PASSWORD', $connectstr_dbpassword);
/** MySQL hostname */
define('DB_HOST', $connectstr_dbhost);
// ... <略> ...
もう少し種明かしをすると、MySQL In App の接続情報は、 MYSQLCONNSTR_localdb
という環境変数として提供されていて、以下のようなフォーマットの文字列です。
Database=localdb;Data Source=127.0.0.1:<ポート番号>;User Id=azure;Password=<パスワード>
ですので、 wp-config.php
では、この環境変数をパースしてそれぞれ設定している、という種明かしでした!
Epilogue - おわりに
小ネタですが…、これを応用すると、簡単に MySQL In App を使えそうですね!