さてさて、前回のブログでEC-CUBEとの出会いを書いたわけですが、その際、EC-CUBE2.4.4をさくらレンタルサーバにインストールする際、ハマったできことを詳しく書いていこうと思います。
今更かんですが、もしかしたらインストールする際、なにかの参考になるかもしれません。
あくまでバージョン2.4.4の話なので、あしからず。。
まず、最初にハマったのがこれ。
ファイルをサーバの所定の位置にセットして
インストールURLを表示させようとすると。。。
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, support@sakura.ad.jp and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
ということで、色々調べていると、どうやら、さくらインターネットのレンタルサーバの場合、
/home/ユーザID/www/html配下の.htaccessファイルがあるとうまくアクセスできなくなってしまうようなので、
削除しなければならないとのこと。。
これを削除し、ふたたびアクセスするとめでたくインストール画面が表示されます。
さてさて、一難去ってまた一難なわけですが、
インストールが無事、終了し、管理者画面からログインしてみると今度は色々な部分で文字化けが発生。。。あぁ。。
実はインストールする前に以下のファイルに文字コードの部分を追加する必要があるそうな。。
/home/ユーザID/www/data/class
SC_DbConn.phpの55行目あたり
function SC_DbConn($dsn = “”, $err_disp = true, $new = false){
global $objDbConn;
// Debugモード指定
$options[‘debug’] = PEAR_DB_DEBUG;
// 持続的接続オプション
$options[‘persistent’] = PEAR_DB_PERSISTENT;
// 既に接続されていないか、新規接続要望の場合は接続する。
if(!isset($objDbConn->connection) || $new) {
if($dsn != “”) {
$objDbConn = DB::connect($dsn, $options);
$this->dsn = $dsn;
$buf = $objDbConn->prepare(‘SET NAMES utf8’) ; ←追加
$objDbConn->Execute($buf) ; ←追加
} else {
if(defined(‘DEFAULT_DSN’)) {
$objDbConn = DB::connect(DEFAULT_DSN, $options);
$this->dsn = DEFAULT_DSN;
} else {
return;
}
}
}
通常のレンタルサーバならこんなことはしなくていいのだけれども、さくらはそうはいかないようです。
そしてこれで再インストールすると無事文字化けが直りました。
ただ、ひとつ注意点があって再インストールする際、
それは、以下フォルダ配下のファイルを削除してから実行する必要があります。
/home/ユーザID/www/data/cache
mtb_constants.php以外のファイルを全て削除
これをやらないと、都道府県名などが文字化けしたままになります。
これでめでたく文字化けも解消され、インストール完了となります。
ここまで来るのも一苦労であったわけですが、まだまだ終わりません。
さらなる問題が待ち構えています。
管理者画面からログインし、いざ商品登録を行うと
入力項目の一つ、商品カテゴリが何度商品登録しても登録されないのです。
また、デフォルトで登録されている商品を商品変更した場合も、登録されていた商品カテゴリが消えてしまう困った現象が発生してします。
商品カテゴリがないと、お客様側ページの商品カテゴリ欄に表示されないため、よろしくありません。
ググって色々調べていると、どうやら同じような現象がいたるところで起きているようで、フォーラムなどでも解決策が記載されていたりします。
そんなわけで、わりと簡単に解決できると踏んでいた訳ですが、結局解決までに3日ぐらいを要してしまいました。
というのもこのバグ、解決方法がサーバの環境やec-cubeのバージョンによって違うようで、ネット上でも色々な解決方法が出ており、結局どれを試せばいいのかさっぱりな状態だった訳です。
ひとつの方法として、以下の方法があります。
さくらインターネットでは、サーバコントロールパネルからphp.iniの設定を変更できるため、ここから「magic_quotes_gpc = on」という設定を追加する方法です。
しかし、私の場合はこれでは直りませんでした。
つづいて、「magic_quotes_gpc = on」と記述したphp.iniファイルをテキストエディタで作成し、html/admin/products/ディレクトリ内にアップロードする方法を試しました。
しかし、これでもダメ
そして、原因となっているこのソース「LC_Page_Admin_Products_Product.php」をtracからダウンロードして入れ替えるというのもダメ
途方に暮れていたわけですが、最終的にEC-CUBEのフォーラムをじっくり読み原因を少し理解したところで、プログラムの修正を行いました。
———以下の内容————————
Re: 商品登録時に商品カテゴリ登録ができない
私も同じエラーがありましたが、なんとか解決しました。
/data/class/pages/admin/products/LC_Page_Admin_Products_Product.phpの424行目あたりです。
unserialize()されている値がありますが
本当は配列になって返されるのが正解のようです。
しかし、値の中に、¥マークが付いているので配列ではなく、
bool値が帰ってきてしまい、カテゴリが登録できない模様です。
よって、unserialize()の中の引数を、
unserialize(str_replace(“\\”,””,引数));
———————————————
これを参考に、同プログラムの現在のバージョンのプログラム439行目を以下のように修正してやると、見事に直りました。
~ unserialize(str_replace(“\\”,””,$arrList[‘categor ~
これで、ようやく、商品登録の際、商品カテゴリが登録できるようになったわけです。
昨日はこれで夜中の2時まで格闘しておりました。
そんなこんなで、ようやくまともにつかえるようになったかとおもいきや
まだ問題が。。。。
今度はデザイン変更の画面です。
そこで、ヘッダー、フッター編集を行おうとしたところ、登録ボタンを押すと、¥マークが
いたるところに追加され保存されてしまいます。
そしてデザインがめちゃくちゃになってしまうという現象が起こります。
※ヘッダー、フッターテンプレートを元に戻すには、下記場所に作成されたファイルを削除すると、元に戻ります。
html/user_data/packages/default
footer.tpl
header.tpl
実はこの原因も、上に書いた商品カテゴリが表示されない原因同様、magic_quotes_gpc が原因なのです。
そもそもこのmagic_quotes_gpcとは何なんでしょう。
これは、ググってみると出てくるのですが、magic_quotes_gpc=onとなっていると、クライアントよりフォームで送られた文字列データが全てエスケープされてしまい、 「” → ¥”」「¥ → ¥¥」など変換処理が行われてしまうということらしいです。
さくらインターネットではこれがonに設定されているため、上記のような現象が発生してしまいます。
ついでに言うと、システム設定のパラメータ設定でも保存しようとすると¥が挿入され、エラーとなってしまいます。
解決策としては、このmagic_quotes_gpcをoffに設定してやればよいのですが、さくらインターネットのサーバコントロールパネルからはPHP設定を変更してもなぜか反映されません。
これらの解決方法がようやく分かったため、下記に記載します。
php.iniというファイルを作成し、中にmagic_quotes_gpc = off と1行だけ記載します。
次に、このファイルをサーバ上に配置するのですが、上記例のデザイン設定を行う場合については
html/admin/designの下に配置します。
システム設定→パラメータ設定を変更する場合には、
html/admin/systemの下に配置します。
同様なエラーが発生する場合、html/admin/~~配下にphp.iniを配置してやれば解決することが出来るようです。
そんな感じで、かなり苦労して無事さくらレンタルサーバへのインストールが完了しました。
他のレンタルサーバにすればこんなに苦労しなかったのに。。。
でもですよ。今考えると、これはこれでとても勉強になりましたな〜。。