FuelPHPの環境構築と設定のまとめ

  • 71
    Like
  • 0
    Comment
More than 1 year has passed since last update.

FuelPHPのインストール方法

FuelPHPのインストール

Composerによるインストール

2014年10月時点で、最新バージョンの1.7.2からは依存関係がComposerで管理できるようになりました。

$ composer create-project fuel/fuel:dev-1.7/master プロジェクト名

Composerが無い場合は、Homebrewでインストールしておきましょう。

$ brew install composer

Composerで管理されるパッケージの一覧は、ダウンロードされたFuelPHPプロジェクト直下のcomposer.jsonに記述してあります。

Composerをアップデートするには、下記コマンドを実行します。

$ php composer.phar self-update
$ php composer.phar update

oilコマンドによるインストール

まず、oilコマンドをインストールします。

$ curl get.fuelphp.com/oil | sh

プロジェクトのディレクトリを作成し、その中にoilコマンドでFuelPHPをインストールします。

$ mkdir プロジェクト名
$ cd プロジェクト名
$ oil create プロジェクト名

composer.jsonの編集

composer.jsonはComposerの設定ファイルです。
FuelPHPの依存ライブラリを一括してインストールできます。

FuelPHPのデフォルトのcomposer.jsonでは、minimum-stability(依存するパッケージの最低限の安定性)がdev(開発版)になっているため、これをstable(安定版)に変更します。

プロジェクト名/composer.json
"minimum-stability" : "stable",

composer.jsonを編集したら、下記コマンドで依存関係をアップデートします。

$ php composer.phar self-update
$ php composer.phar update

特に、本番環境へgitでデプロイする場合は、デフォルトでは依存パッケージはgitで管理されないようになっているため(.gitignoreファイル参照)、本番環境の中でcomposer.phar updateするか、.gitignoreファイルを修正して依存パッケージもgitで管理するようにします。

環境変数の設定

config.phpの編集

言語設定

PHPにはロケールに影響を受ける関数が多数あるので、日本語を扱う場合は日本語のロケールに設定する必要があります。

プロジェクト名/fuel/app/config/config.php
'language' => 'ja', // Default language
'local' => 'ja_JP.UTF-8', // PHP set_local() setting, null to not set

タイムゾーンの設定

タイムゾーンは日本であれば東京でなくても'Asia/Tokyo'と設定します。

プロジェクト名/fuel/app/config/config.php
'defaul_timezone' => 'Asia/Tokyo',

ロギングの設定

開発時にはログ情報は多い方がいいので、すべてのログを記録するようにします。

プロジェクト名/fuel/app/config/config.php
'log_threshold' => Fuel::L_ALL,

トークンソルトの設定

CSRF対策のトークンを生成するためのソルトを設定します。

プロジェクト名/fuel/app/config/config.php
'token_salt' => 'abcdefghijklmnopqrstuVwxyZ/1234567890',

bootstrap.phpの設定

文字コードの設定

FuelPHPはデフォルトではHTTPレスポンスヘッダに文字コードを指定しないので、次のようなヘッダになっています。

Content-Type: text/html

default_charsetを指定することで、文字コードも出力させるように変更することができます。
下記をfuel/app/bootstrap.phpに加筆します。

プロジェクト名/fuel/app/bootstrap.php
// Set default charset
ini_set('default_charset', 'UTF-8');

これで、レスポンスヘッダが次のようになります。

Content-Type: text/html; charset=UTF-8

本番環境と開発環境を切り替える

.htaccessを修正する方法

プロジェクト名/public/.htaccess
SetEnv FUEL_ENV production

本番環境でPHPのエラーをユーザの画面に表示させないために、この設定は必要です。
エラーを表示させない方法については後述します。

ただこの方法だと頻繁に本番環境を修正したい場合、ローカル開発環境ではいちいち.htaccessファイルを修正する必要があり不便です。
なので、完成に至るまでは下記bootstrap.phpを修正する方法で対応すると良いかと思います。

bootstrap.phpを修正する方法

PHPのグローバル変数である$_SERVERを利用すると、次のようにうまく書けます。

プロジェクト名/fuel/app/bootstrap.php
switch (isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : '')
{
    case 'example-env.elasticbeanstalk.com':
    case 'example.jp':
        Fuel::$env = Fuel::PRODUCTION;
        break;

    default:
        Fuel::$env = Fuel::DEVELOPMENT;
        break;
}

この場合、本番環境ではHTTPS通信にしている場合などに、自動で環境を切り替えてくれるのでとても便利です。

これでconfigフォルダ内のdb.phpを、ローカル環境のときはローカルDBを使用し本番環境では違うDBを参照するなどの設定ができます。

設定値の確認

適当なコントローラとビューを作成し、下記を出力して確認することができます。

echo '<pre>';
echo Fuel::VERSION . PHP_EOL;
echo setlocale(LC_ALL, 0) . PHP_EOL;
echo Date::forge()->format('mysql') . PHP_EOL;
echo ini_get('default_charset');
echo Fuel::$env . PHP_EOL;
echo isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : '$_SERVER[\'SERVER_NAME\'] is not set';
echo '</pre>';

次のように表示されていれば問題ありません。

1.7.2
ja_JP.UTF-8
2014-10-24 16:38:22
UTF-8
development
example.local

本番環境へのデプロイの際の注意点

フルコントローラ(public/index.php)の編集

エラー表示について

デフォルトの設定ではdisplay_errorsが1になっているので、FuelPHPがキャッチできないエラーがあるとPHPのエラーが表示される可能性があります。

これを回避するために下記のようにpublic/index.phpを修正します。

public/index.php
/**
 * Set error reporting and display errors settings.  You will want to change these when in production.
 */
error_reporting(-1);
if (isset($_SERVER['FUEL_ENV']) && $_SERVER['FUEL_ENV'] === 'production')
{
    // FuelPHPでキャッチできないエラーをPHPでもキャッチさせない
    ini_set('display_errors', 0);
}
else
{
    ini_set('display_errors', 1);
}

この設定が有効なのは、本番環境であることの指定の仕方を.htaccessでSetEnv FUEL_ENV productionと記述した場合です。
bootstrap.phpでの設定では$_SERVER['FUEL_ENV']が設定されないので注意しましょう。

実行時間とメモリ使用量の表示について

pulic/index.phpの最後の方に、実行時間とメモリ使用量の表示をするコードがあります。
これも本番環境では必要ないので、下記のように条件分岐を行うか、コメントアウトして削除します。

public/index.php
// This will add the execution time and memory usage to the output.
// Comment this out if you don't use it.
if (!isset($_SERVER['FUEL_ENV']) || $_SERVER['FUEL_ENV'] !== 'production')
{
    if (strpos($response->body(), '{exec_time}') !== false or strpos($response->body(), '{mem_usage}') !== false)
    {
        $bm = Profiler::app_total();
        $response->body(
            str_replace(
                array('{exec_time}', '{mem_usage}'),
                array(round($bm[0], 4), round($bm[1] / pow(1024, 2), 3)),
                $response->body()
            )
        );
    }
}

Composerのrequire-devで指定したパッケージについて

require-devで指定したパッケージは開発環境専用のものなので本番環境には不要です。

また、-oオプションを指定して。PSR-0/4に準拠したクラスのオートロードを最適化することができます。
特にAspectMockのような負荷の高いオートローダは削除しておくことが推奨されています。
(開発時には便利ですが)

まとめると、下記コマンドを本番環境のFuelPHPプロジェクト直下で実行すればいいことになります。

$ php composer.phar install --no-dev -o

本番環境によっては管理者権限でないと実行できない場合があるので、その場合はsudoを先頭につけて実行します。