概説
- ここではCodeIgniterにPHP dotenvを導入する方法を示します。
導入経緯
- DBの接続情報などcredentialな内容をGitHub上にコミットしている状態が気持ち悪かった。(プライベートリポジトリなんだけど)
- Webサーバーの環境変数でもよかったのだけど、CLI経由でDB接続している処理があり、.envに設定をまとめたかった。
- Laravelでは標準でバンドルされているのでなんだか悔しかった。
準備
- composer.jsonに
"vlucas/phpdotenv": "2.0.1"
を追記します。(※ここではcomposerの使い方については言及しません)
composer.json
"require": {
"codeigniter/framework": "3.0rc",
・
・
省略
・
・
"vlucas/phpdotenv": "2.0.1"
},
- 次に.envファイルを準備します。今回は、CodeIgniterのアプリケーションディレクトリ配下に以下のようなDB接続情報を記載したものを準備しました。
.env
DB_HOST="localhost"
DB_NAME="db_name"
DB_USER="db_user"
DB_PASS="db_pass"
- 利用するたびに
$dotenv->load();
を呼ぶのは面倒なので、今回はcore/MY_Controller.php
の__constructに以下のような感じで追記しました。(もっと良いやり方があれば教えて下さい) - 上記のとおり、.envファイルをアプリケーションディレクトリの直下に配置したので、
Dotenv\Dotenv
の引数にAPPPATH
を渡しています。
core/MY_Controller.php
<?php
class MY_Controller extends CI_Controller
{
public function __construct()
{
parent::__construct();
$this->dotenv = new Dotenv\Dotenv(APPPATH);
$this->dotenv->load();
}
使い方
- 準備が整ったら、後は
getenv('DB_HOST')
のように呼び出すだけです。以下はconfig/database.php
での使用例。
config/database.php
$db['default'] = array(
'dsn' => '',
'hostname' => getenv('DB_HOST'),
'username' => getenv('DB_USER'),
'password' => getenv('DB_PASS'),
'database' => getenv('DB_NAME'),
・
・
省略
・
・
);
既にGitHubにcredentialな内容をコミットしちゃってる場合は?
- GitHub にパスワードとかセンシティブなファイルを push してしまったときの対処法を参考にするとよいと思います。