EC CUBEをPostgreSQLのUnix ドメイン・ソケットで通信したい

DBを使うときは極力Unix domain socketを使いたいと思う。

EC CUBEはDBとの接続にtcp通信しか許してくれないらしく、ソースをいじる羽目にorz
仕方ないのでハードにコーディングしてしまう。

まずはhtml/install/index.phpを修正。$dsn = の行を検索して編集。db_serverからdb_portまでをunix()に置き換える。4,5カ所あるので全て変更。

// この行を修正
// $dsn = $arrRet['db_type']."://".$arrRet['db_user'].":".$arrRet['db_password']."@".$arrRet['db_server'].":".$arrRet['db_port']."/".$arrRet['db_name'];
//↓
$dsn = $arrRet['db_type']."://".$arrRet['db_user'].":".$arrRet['db_password']."@unix()/".$arrRet['db_name'];

次に、data/class/SC_Initial.phpを修正。function defineDSN()内のdefine("DEFAULT_DSN"のところを変更。

            /** サイト用DB */
            //ここを修正
            //define ("DEFAULT_DSN",
            //        DB_TYPE . "://" . DB_USER . ":" . DB_PASSWORD . "@"
            //        . DB_SERVER . ":" .DB_PORT . "/" . DB_NAME);
            // ↓
            define ("DEFAULT_DSN",
                    DB_TYPE . "://" . DB_USER . ":" . DB_PASSWORD . "@unix()/" . DB_NAME);

これで完了。インストール時のDBサーバ名はlocalhostにでもしておけばOKなはず。

それにしてもEC CUBEはセーフモードでも動いてくれるから好きだ。せっかくphpを使うんだからcgiでは動かしたくないからね。

#パッチなんか作っておいても直ぐにアップデートされるからやめておこう。というか、プロトコルも選択させて欲しい・・・