EC-CUBEをMySQLで動かして文字化けが起こるとき

eccube

EC-CUBEの消費税計算の記事は、このブログの人気エントリなのですが、今日はEC-CUBECPIの共用サーバに自力でインストールする時のTipsを(鳥頭な自分のために)書き残しておこうと思います。ちなみにCPI提供のインストーラを使う場合はこの限りではありません。もっと簡単です。

1. .htaccessの準備

CPIはPHPファイルをそのまま設置しても動きません。.htaccessに次のように書きます。

[text]AddHandler x-httpd-php524 .php[/text]

ついでにphp.iniもカスタマイズすることが出来ますので、下のような文を追加することにします。(ユーザーホームにconfというディレクトリを作ってphp.iniを置く場合。設置場所のパスを書く)

[text]suPHP_ConfigPath /usr/home/(ユーザーID)/conf/[/text]

2. php.iniのカスタマイズ

次はphp.iniを編集しますが、デフォルトから変更する部分だけ書いておいておけばよいです。

[text]output_handler = mb_output_handler
register_globals = Off
;post_max_size = 8M
magic_quotes_gpc = Off
upload_max_filesize = 5M

;session.use_cookies = 0
;session.use_trans_sid = 1

mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.encoding_translation = On[/text]

3. EC-CUBEをMySQLで動かす時の文字化け対策

これで普通にインストール出来たりするんですが、管理画面にログインすると「管理者」が「管????」になったり、文字化けが発生するのです。これにはかなり手こずりました。おそらくPHPとMySQLの文字コードがらみでうまくいってないことが想像されるものの、さて、どうしたらよいやらとphpMyAdminとにらめっこしたり、ネットをさまよって十数分。やっと見つけてきたのが、こちらの記事

data/class/SC_DbConn.php
の $this->conn = $objDbConn; の下に

if ($this->conn instanceof DB_mysql) {
$this->conn->query("SET NAMES 'utf8'");
}

を追加。

PHP 5.2.4
MySQL 5.0.45
の環境にインストールできました。

素晴らしい…が、ちょっと待って。SET NAMESって使っちゃいかんのではなかったっけ?と、思って調べてみるとこんなことが書いてありました。

・どうすれば安全なのか
PHP5.2.3以降の場合なら → mysql_set_charset()を使えばOK
PHP5.0.5以降でmysqliを使用しているなら → mysqli_set_charset()を使えばOK
PHPからSET NAMESを使わない方が良い理由と対策まとめ – twk @ ふらっと

なるほどねえ。というわけで、件の ‘/data/class/SC_DbConn.php’ を開いてみましょう。(下の行番号は1からだけど65行目辺り)

        //MySQL文字化け対策(MySQLで文字化けする場合は以下のコメントアウトをはずして動作確認してみてください。)
        //if (DB_TYPE == 'mysql') {
        //    $objDbConn->query('SET NAMES utf8');
        //}

おい、SET NAMES使ってるじゃん…。というわけで、以下のように書き直し。

        //MySQL文字化け対策(MySQLで文字化けする場合は以下のコメントアウトをはずして動作確認してみてください。)
        if (DB_TYPE == 'mysql') {
            mysql_set_charset("utf8");
        }

これで、一件落着。文字化けもせず、インストールは完了です。

あ、でもまだ本番に近づくにつれて不具合が出るかもしれません。その時は逐一このブログで報告(というか自分用にメモ)したいと思います。

この記事を書いた人

いがらしたけし