[FuelPHP] 本番環境に切り替える [さくらインターネット]

FuelPHP

FuelPHP で作ったプログラムを公開する際は「FUEL_ENV」を「production」にしないといけません。
しかし、さくらインターネット を始めとして多くの レンタルサーバ では SetEnv を何でも受け入れているわけではありません。
なので「.htaccess」で「SetEnv FUEL_ENV production」としても PHP 側では読み取れないようになっています。

その対策を記します。

まずは発想を変える。

「どうやって”SetEnv FUEL_ENV production”を認識させるか」

ではなく

「認識できないなら本番環境だ」

と考えます。

具体的な方法

具体的には次のようにします。

「SetEnv FUEL_ENV」がされていない時のデフォルトが「development」になっていますので、デフォルトを「production」にします。
そうするには「app/bootstrap.php」の一部を以下のように編集します。

// Fuel::$env = (isset($_SERVER['FUEL_ENV']) ? $_SERVER['FUEL_ENV'] : Fuel::DEVELOPMENT);
Fuel::$env = (isset($_SERVER['FUEL_ENV']) ? $_SERVER['FUEL_ENV'] : Fuel::PRODUCTION);

 

開発環境では「development」の設定が有効になるよう「public/.htaccess」を次のようにしておきます。

# SetEnv FUEL_ENV production
SetEnv FUEL_ENV development

 

ちなみに さくらインターネット では「.htaccess」の「Options +FollowSymLinks -Indexes」が使えないので、削除(あるいはコメントアウト)しなければなりません。
(「Options ~」があると「.htaccess: Options not allowed here」というエラーが出てしまって動きません。)

# Make sure directory listing is disabled
# Options +FollowSymLinks -Indexes
RewriteEngine on

 

FuelPHPを普通に使う分には「Options +FollowSymLinks -Indexes」が無くても問題なく動作します。

対策は以上です。

なお、「production」にすると、もしエラーが出ても画面でエラー内容が表示されなくなります。
エラー内容を確認するには「app/logs/」配下に出力されるログファイルを確認します。

コメント

  1. Kai より:

    「oil」は「.htaccess」と関係ないから、もともと「development」しか見ないようだ。
    これってバグじゃね? 回避策あるのか?

    • Kai より:

      今回の記事ではデフォルトを「production」に変えたから「production」の設定しか見ない。
      現在ローカル開発環境ではデフォルトを「development」にしている。