CodeIgniter をインストールした直後にするべき設定のひとつに環境の設定があります。
Webアプリケーションでは、公開サーバーである本番環境の他に開発環境やテスト環境がある場合も多くあります。
CodeIgniterを始めとするフレームワークは独自の設定値などを設けることによって、そういった複数の環境を簡単に切り替えることができる仕組みを実装しています。
今回はCodeIgniterで複数の環境を切り替えるための設定を行っていきます。
複数環境の切り替え方
CodeIgniterでは ENVIRONMENT という定数を用いて環境の切替を行っています。
このENVIRONMENTを切り替えることによって、開発環境ではデバッグログを画面とログに出力し、本番環境ではエラーログのみを出力するなどの切り替えが可能になります。
また、開発環境と本番環境ではデータベースへのアクセス設定などが異なることも多いため、複数環境の切り替えは非常に便利です。
CodeIgniterではデフォルトで以下のような環境値を用意しています。
ENVIRONMENT | 環境設定 |
---|---|
development | 開発環境 |
testing | テスト環境 |
production | 本番環境 |
この環境値は独自に増やすこともできますが、特に理由がない場合はデフォルトのまま使っておけば良いです。比較的小規模な環境では、開発環境と本番環境の2種類程度を使い分けることが多いでしょう。
ENVIRONMENT 定数の設定
ENVIRONMENT定数はindex.php の一番最初に定義される最も基本的な定数となります。該当部分はindex.phpの56行目(CodeIgniter3.1.6)となります。
define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development');
サーバー定数の「CI_ENV」が存在していればその値、そうでなければ development(開発環境)というのがデフォルトの設定値となっています。
何の設定もしない場合は development(開発環境) になります。
この定数定義部分を各自の環境に合わせて変更し、ENVIRONMENT に適切な値が代入されるようにしましょう。
設定方法を以下に紹介します。
$_SERVER[‘CI_ENV’]
CodeIgniterのデフォルトの挙動では、ENVIRONMENT はサーバー定数の $_SERVER[‘CI_ENV’] がある場合はその値になります。
サーバー定数はapache などのサーバーに定数を設定することで使用できるようになる定数で、PHPからは以下のようにアクセスします。
$_SERVER['サーバー定数値'];
つまり、CodeIgniterのCI_ENVにアクセスしたい場合は以下のようになります。
$_SERVER['CI_ENV'];
CI_ENVに値を設定する
サーバ定数の「CI_ENV」に値を設定する場合は、httpd.conf もしくは .htaccess が必要になります。
httpd.conf に設定する
httpd.conf に設定できる場合は以下のようになります。
<Directory "/var/www/html"> SetEnv CI_ENV production </Directory>
または、VirtualHostに書いてもOKです。
<VirtualHost *:80> (略) SetEnv CI_ENV production </VirtualHost>
.htaccess に設定する
.htaccess での設定は以下のようになります。
SetEnv CI_ENV development
CI_ENVはPHPがモジュール版でないと動作しない
SetEnvで設定される値は、WEBサーバー(apache)経由で渡される環境変数になります。
そのため、PHPをCLI環境で実行している場合には取得することができません。
CI_ENVを使用して環境の切替を行うには、PHPがモジュール版で動作している必要がありますので注意して下さい。
例その1:本番環境がCLIだが、開発環境ではモジュールを用意できる
本番環境はCLIでも、開発環境ではモジュール版を用意できる場合は比較的簡単です。ENVIRONMENTのデフォルト値を development(開発環境)から production(本番環境)に変更し、開発環境のhttpd.conf(または.htaccess)のCI_ENV値を設定するだけです。
define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development'); ↓ define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'production');
<Directory "/var/www/html"> SetEnv CI_ENV development </Directory>
例その2:CLI環境しか用意できない
CLI環境しか用意できず、CI_ENVが使えない場合は$_SERVER[“SERVER_NAME”]などで切り替えると楽です。
if($_SERVER["SERVER_NAME"]=="localhost"){ // SERVER_NAMEがlocalhostの場合は開発環境 define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development'); }else{ // それ以外は本番環境 define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'production'); }
環境ファイルでの切り替え
CodeIgniterは、application/config/ フォルダで設定値を管理しています。
複数の環境がある場合、このapplication/config/内に「production」や「development」などのフォルダを作成することによって、デフォルトの設定値よりも優先して読み込んでくれます。
application/ |- config/ | |- config.php (デフォルト用設定値) | |- development/ | | |- config.php (開発環境用設定値) | |- production/ | | |- config.php (本番環境用設定値) | |(略)
CodeIgniterは最初に現在の環境の設定ファイルを読み込みます。環境用の設定ファイルが存在しない場合は、デフォルトの設定ファイルを読み込みます。
- CodeIgniterの設定ファイル読み込み順
- 環境用の設定ファイル > デフォルト用設定ファイル
そのため、各環境で共通の項目はデフォルトの設定ファイルに記載しておき、個別の項目のみ環境用の設定ファイルに記載することができます。
コメント