XAMPP環境でEC-CUBEがphpMyAdminで文字化け

EC-CUBEの検証をする必要性が出たので、手っ取り早く、XAMPPのWindows版をDLしてきて、XP環境にインストールしてみた。XAMPPは1.7.3を使ったところEC-CUBEのインストールが走らない。調べてみたところ1.7.3ではEC-CUBEのインストールが走らないのは既知の事例らしく、1.7.2なら大丈夫だとのこと。インストールやり直し。これでEC-CUBEのインストールは行えた。

ところが・・・流石にApache、MySQL、Webブラウザ(Firefox)の大物が3つも動くと私の使い慣れた(要するに古い)PC環境では荷が重くてガッツリとCSVファイルからデモデータを流し込んだところ一晩かかっても終わらない状況で、こりゃWindows環境だけで全てを動かすのは無理だ・・と言う結論に至った。

それにもう一つ問題点に気づいた。phpMyAdminでEC-CUBEのデータを参照すると日本語が完全に文字化けしている。Linux(CentOS)環境でMySQLやPostgreSQLを構築して仕事で使っているがこういう事象は起きない。っていうか多分インストーラにお任せしちゃってるのが悪いんだろうけど。

という訳で、この際XAMPP環境にはSQLデータだけを保存する事にして、EC-CUBEのアプリケーション部分は既存のLinuxサーバのApacheで動かす事にした。要するにWebサーバとSQLサーバを分離させようという事だ。それなら負荷が軽くて済む。XAMPPはお手軽な1.7.3を使用する事にした。どうせMySQLしか使わないんだし。

さてEC-CUBEもLinuxサーバ上でインストールが終わった。XAMPP上のMySQLデータをphpMyAdminで参照してこれまた困った・・・やっぱりダメなのか?文字化けだ。これって要するに文字コードの問題だよな。だけどEC-CUBEはちゃんと日本語も表示出来るんだぜ。仕方ないので文字コードの設定を調べてみることにした。

show variables like "char%"


mysqlの文字コード設定を調べる

UTF-8を使用するから、下図の様になっていて欲しいのだが・・


MySQLの文字コードがUTF-8の場合

こんなふうにlatin1になっていた・・・orz


MySQLの文字コードがlatin1になっていた場合

もちろん解決したのでこの2パターンのキャプチャが取れた訳なので解決方法を記しておく。人間は忘れる事が出来る生き物なので備忘録を取ったら(備忘録したことだけ覚えておいて)忘れて次の事を覚える方が効率的だと思うからだ。

具体的にはインストール先(D:\xampp\mysql\bin\)にあるmy.iniを編集した。私はDドライブをインストール先に指定したのでこのようになっている。インストールの状況によってPATHは違ってくるのは言うまでも無いので参考に程度に(my.iniを検索した方が速いかもね)。

[mysqld]セクションに下記の様にUTF-8がデフォルトの文字コードであることを追記してMySQLを再起動するだけでOKだ。より慎重に行うならまずMySQLを停止してからmy.iniを編集し、その後でMySQLを起動すると良いだろう(てかそうするべきなのかもね)。

[mysqld]
・・・
default-time-zone       = "Asia/Tokyo"
default-character-set   = "utf8"
・・・・

これでMySQLサーバの文字コードもUTF-8になったので、EC-CUBEを再インストールすれば文字化けせずに、phpMyAdminから参照することが可能となるはずだ。もちろんphpMyAdminを使ってバックアップやCSV形式などでエクスポートも可能となるだろう。

XAMPPのTIPSとしてこれは明記しておくべき事項だと思うけどな。もしくはインストーラで解決して欲しいものだ。(なぜかWordPressはlatin1になっている状態でインストールしても文字化けせずにphpMyAdminで参照することが出来た。EC-CUBEのSQLへの書き込み処理がショボいってことかな?)

これで解決したと思っていた・・ところが甘かった。やっぱりWordPressやMovableTypeは問題無いのに、EC-CUBEだけはphpMyAdminで見ると日本語が文字化けしている。ウキーッいったいどういうこっちゃねん!

とキレても仕方ないのでGoogleせんせーに教えて貰おう。

一発でそれらしき解決方法を発見した。

凛の開発メモ|【EC-Cube】PHPMyAdmin上の文字化けを回避

どうやらEC-CUBEのDBコネクト機能にメスを入れるらしい。私はPHPさっぱりこ分からんちんなので素直にやってみる。64行目にあると書いてあるが69行目に「$this->conn = $objDbConn;」の記述があった。おそらくEC-CUBEのバージョンによる違いだろう(私は最新版の2.4.4を使用した)。ってことはバージョンアップでバグ取れてないって事か?(唖然 ともかく検索して見つけた次の行に、「$this->conn->query("SET NAMES utf8");」を追記する。

$this->conn = $objDbConn;
$this->conn->query("SET NAMES utf8")

これでもう一度EC-CUBEのインストールをやり直す。テーブルの作成に失敗したと言う警告が出るが全て削除してしまって新しくDBを構築し直すとOKになった!~ありがたい情報サンクスです。PHPも勉強せなならんですなーと言うだけでPHPを勉強する気は今のところナシ(苦笑

コメント

Comment spam is annoying.

There has been an increase in comment spam, but we decline it. It’s pointless because we use Akismet to block spam comments. Spam comments will not be posted.

コメントスパムが増えていますがお断りします。akismetでスパムコメントを弾いているので無意味です。スパムコメントは掲載されません。

ブロックしたスパム

DMM広告

タイトルとURLをコピーしました