裏紙に書く程度の内容

nginx で CodeIgniter の環境別設定

CodeIgniterでは、本番環境/開発環境を分けるのにCI_ENVを設定します。
その設定についてのメモ書き。

基本的な構造

ドキュメントルートのindex.phpにて、定数ENVIRONMENTが定義され、各所で利用されます。

define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development');

要は$_SERVER['CI_ENV']developmentとかproductionが指定できればいいわけです。

nginx の場合

webサーバがnginxの場合はnginxの設定ファイルにサーバ変数が定義できます。

location ~ \.php$ {
        fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param HTTPS on;
        fastcgi_param CI_ENV production;
        include fastcgi_params;
}

fastcgi_param CI_ENV production;の部分。開発環境の場合はfastcgi_param CI_ENV development;とすればおーけー。

apache の場合

apacheの場合は.htaccessで制御。

SetEnv CI_ENV production

種別を増やしたい場合

CodeIgniterでは切り替える環境名として、デフォルトでは以下が対応可能です。
(カッコ内は主な利用用途。)

  • production (本番環境用)
  • development (開発環境用)
  • testing (検証環境用)

application/config以下にそれぞれの環境用ディレクトリ・設定ファイルを作り、上記サーバ変数(CI_ENV)を変更して使うわけですが、
これでは足りん!という場合。

任意の環境名で設定を作ることが出来ます。

例としてhoge環境を追加してみます。

設定ファイル準備

まず、application/config/hoge/ディレクトリを作成し、配下にhoge環境用の設定ファイルを作成します。
ここはproduction/development/testingと同じですね。

webサーバ設定

続いてこれも既存環境名同様、apacheなりnginxにサーバ変数を設定します。

fastcgi_param CI_ENV hoge;

設定方法は前述参照。

index.php 修正

ここから既存環境名とはちがうひと手間。

ルートのindex.phpに、ENVIRONMENTのスイッチ文があります。

switch (ENVIRONMENT)
{
    case 'development':
        error_reporting(-1);
        ini_set('display_errors', 1);
    break;

    case 'testing':
    case 'production':
        ini_set('display_errors', 0);
        if (version_compare(PHP_VERSION, '5.3', '>='))
        {
            error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT & ~E_USER_NOTICE & ~E_USER_DEPRECATED);
        }
        else
        {
            error_reporting(E_ALL & ~E_NOTICE & ~E_STRICT & ~E_USER_NOTICE);
        }
    break;

    default:
        header('HTTP/1.1 503 Service Unavailable.', TRUE, 503);
        echo 'The application environment is not set correctly.';
        exit(1); // EXIT_ERROR
}

このままだとENVIRONMENThogeにしたのでdefaultケースに入り、”The application environment is not set correctly.”とエラーメッセージが表示されて何も動きません。
よってここにケースを追加します。

switch (ENVIRONMENT)
{
    case 'development':
        error_reporting(-1);
        ini_set('display_errors', 1);
    break;

    case 'testing':
    case 'production':
    case 'hoge':
        ini_set('display_errors', 0);
        if (version_compare(PHP_VERSION, '5.3', '>='))
        {
            error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT & ~E_USER_NOTICE & ~E_USER_DEPRECATED);
        }
        else
        {
            error_reporting(E_ALL & ~E_NOTICE & ~E_STRICT & ~E_USER_NOTICE);
        }
    break;

    default:
        header('HTTP/1.1 503 Service Unavailable.', TRUE, 503);
        echo 'The application environment is not set correctly.';
        exit(1); // EXIT_ERROR
}

hoge環境の用途が開発に使うならばdevelopment側のケースに入れてしまう方がいいでしょう。ここではとりあえずproduction側に入れました。

ここまでで、hoge環境は出来上がりです。

注意点

作成する環境名とconfig/配下に作成する指定環境用ディレクトリ名は同じにしましょう。

CodeIgniterのsystem側でENVIRONMENT(=環境名)を設定ファイルのパスとして使用しているため、ここが違うとエラーになります。

URABLO
広告
Index
広告