週末IT

IT初心者が学んだこと思ったこと考えたことのまとめ

タグ:php

ユーザーやパスワードなどの設定は共通かつ使用データベースのみ変更したい場合、例えば日時によりデータベースを切り替えたい場合や、ローカルと別サーバーでのデータベース切り替えなどへの対処。
database.phpにいくつも似たような設定を用意するのは嫌だったので、使用する設定は1つとし、データベースのみ切り替える。

AppModel.php内での切り替え

使用するすべてのモデルのデータベースを一律で切り替えたかったため、AppModel.phpのコンストラクタ内で切り替えを実装。

class AppModel extends Model{

    public function __construct($id = null, $table = null, $ds = null) {

        // データソースへの参照を取得
        $dbSource = ConnectionManager::getDataSource ($this->useDbConfig);

        // ローカル環境かどうかでデータベース名の切り替え
        if ($_SERVER ['REMOTE_ADDR'] == '127.0.0.1') {
                $dbName = 'local_db';
        } else {
                $dbName = 'another_db';
        }

        // データベース名の書き換え
        $dbSource->config ['database'] = $dbName;

        parent::__construct ($id, $table, $ds);

    }

}

これで使用データベースの切り替えができた。


ここではPHPのマルチバイト文字列関数(mb_convert_kana(),mb_substr(),mb_split()など)のデフォルトの文字エンコーディングを変更する方法をまとめます。

1. php.iniを適当なエディタで開く。場所はphpinfo()で確認できる。

2. 1730行目辺りの
;mbstring.internal_encoding = EUC-JP
の先頭のセミコロンを外し、任意の文字コードを指定する。例えばutf-8にしたい場合は
mbstring.internal_encoding = UTF-8

3. apahceを再起動する(Mac OS X標準付属apahceならばこの記事へ)

これでマルバイト文字列関数のデフォルトの文字エンコーディングが変更され、その変更が反映されたと思います。

このページのトップヘ