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/」配下に出力されるログファイルを確認します。
コメント
「oil」は「.htaccess」と関係ないから、もともと「development」しか見ないようだ。
これってバグじゃね? 回避策あるのか?
今回の記事ではデフォルトを「production」に変えたから「production」の設定しか見ない。
現在ローカル開発環境ではデフォルトを「development」にしている。