Check! 試用版 Azure Web Apps の WordPress テンプレートのデータベースは?

  • 0
    Like
  • 0
    Comment

    こんにちは、 @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 へ接続する処理が差し込まれているのでした。

    wp-config.php
    // ... <略> ...
    
    $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 という環境変数として提供されていて、以下のようなフォーマットの文字列です。

    MYSQLCONNSTR_localdb
    Database=localdb;Data Source=127.0.0.1:<ポート番号>;User Id=azure;Password=<パスワード>
    

    ですので、 wp-config.php では、この環境変数をパースしてそれぞれ設定している、という種明かしでした!

    Epilogue - おわりに

    小ネタですが…、これを応用すると、簡単に MySQL In App を使えそうですね!