FuelPHP でのデータベース接続設定 〜 root のパスワードを root にしないでください

FuelPHP の設定ファイルの仕組みを理解していないブログ記事がいくつか見られ、それが拡散しているようなので解説を書いておきます。

データベース接続設定を正しくしていないために、うまく接続できず、

とりあえずmySQLのrootパスワードをrootに変えることで動いた。

さくらVPSでFuelPHPからmySQLへDB接続 | ネットビジネスで月収100万は難しくない!

とか、

configの下にある下記dir
・development
・production
・staging
・test
を削除したら動いたらしい。

FuelPHP DB接続(さくらスタンダード) | 亀のよーにのろのろと
[FuelPHP] DB接続でちょっとハマる | suka4's memo

上記のように FuelPHP の設定ファイルを配置する app/config フォルダ内の、環境別の設定ファイルを配置するフォルダを強引に削除してしまうとか、そういう内容の記事がありました。

これらはすべて正しくない対処法です。

FuelPHP の設定ファイルの仕組み

環境 - 概要 - FuelPHP ドキュメント に書いてある通りですが、FuelPHP では複数の環境のために複数の設定ファイルを使えるようになっています。

データベース接続設定で言うと、通常、本番環境でのデータベースは開発環境でのデータベースとは異なり、サーバ名や ID/Password も違います。なので、本番環境用と開発環境用の 2つの設定ファイルは最低限必要になるはずです。これが同じで 1つしかないという場合は、その開発環境自体が間違っています。

そこで、FuelPHP では、app/config フォルダ内に、環境別のフォルダを用意して設定ファイルを作成できるようになっています。

また、設定は app/config フォルダにあるものが先に読み込まれ、環境別のフォルダ内のものが後から読み込まれ、同じ設定項目があれば上書きされます。

なので、以下のように設定を記述します。

app/
  config/
    db.php         <--- 共通するデータベース接続設定(データベースドライバの指定など)
      development/
        db.php     <--- 開発環境に固有のデータベース接続設定(ホスト名、ID/Passwordなど)
      production/
        db.php     <--- 本番環境に固有のデータベース接続設定(ホスト名、ID/Passwordなど)

(11:19 追記)FuelPHP 1.6 では、app/config/db.php は空の配列を返すようになっています。実は、設定ファイルは app/config フォルダ以外に fuel/core/config フォルダにも存在しており、app/config 以下の設定より先に core/config 以下のものが読み込まれます。core/config 以下の設定を変更したい場合は、core/config 以下にある設定ファイルを app/config 以下にコピーして変更します。

データベース接続設定のように、環境別に異なる必要性がない設定もありますが、その場合は、app/config フォルダ直下にのみその設定ファイルを配置して、環境別のフォルダ内には同名の設定ファイルが存在しなければ OK です。ほとんどの設定ファイルはデフォルトでそういう状態になっています。

環境の指定方法

環境別に設定ファイルを複数使えることはわかったと思いますが、動作している FuelPHP が、どの環境モードで動作するかは、環境変数 FUEL_ENV で指定できます。指定がない場合のデフォルトは開発環境(development)です。

通常は、Apache.htaccess で指定します。

(11:38 追記)環境変数が指定できない/したくない、という場合は、fuel/app/bootstrap.php のコードを書き換えて好きなように、例えば、$_SERVER['SERVER_NAME'] で変更するとか、設定してください。例えば、さくらのレンタルサーバでは .htaccess環境変数 FUEL_ENV を指定することはできません。