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(安定版)に変更します。
"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にはロケールに影響を受ける関数が多数あるので、日本語を扱う場合は日本語のロケールに設定する必要があります。
'language' => 'ja', // Default language
'local' => 'ja_JP.UTF-8', // PHP set_local() setting, null to not set
タイムゾーンの設定
タイムゾーンは日本であれば東京でなくても'Asia/Tokyo'と設定します。
'defaul_timezone' => 'Asia/Tokyo',
ロギングの設定
開発時にはログ情報は多い方がいいので、すべてのログを記録するようにします。
'log_threshold' => Fuel::L_ALL,
トークンソルトの設定
CSRF対策のトークンを生成するためのソルトを設定します。
'token_salt' => 'abcdefghijklmnopqrstuVwxyZ/1234567890',
bootstrap.phpの設定
文字コードの設定
FuelPHPはデフォルトではHTTPレスポンスヘッダに文字コードを指定しないので、次のようなヘッダになっています。
Content-Type: text/html
default_charsetを指定することで、文字コードも出力させるように変更することができます。
下記をfuel/app/bootstrap.php
に加筆します。
// Set default charset
ini_set('default_charset', 'UTF-8');
これで、レスポンスヘッダが次のようになります。
Content-Type: text/html; charset=UTF-8
本番環境と開発環境を切り替える
.htaccessを修正する方法
SetEnv FUEL_ENV production
本番環境でPHPのエラーをユーザの画面に表示させないために、この設定は必要です。
エラーを表示させない方法については後述します。
ただこの方法だと頻繁に本番環境を修正したい場合、ローカル開発環境ではいちいち.htaccessファイルを修正する必要があり不便です。
なので、完成に至るまでは下記bootstrap.phpを修正する方法で対応すると良いかと思います。
bootstrap.phpを修正する方法
PHPのグローバル変数である$_SERVERを利用すると、次のようにうまく書けます。
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を修正します。
/**
* 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の最後の方に、実行時間とメモリ使用量の表示をするコードがあります。
これも本番環境では必要ないので、下記のように条件分岐を行うか、コメントアウトして削除します。
// 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を先頭につけて実行します。