EC-CUBE2.11系でAPCを使う場合の対応

最近、EC-CUBE2.11.5で作られたECサイトの機能カスタマイズをやっていました。
で、ローカル環境で開発もほぼ終わり、サーバ側に環境を構築し、EC-CUBE2.11.5をインストールし、
さて動かそうとしたのですが、
妙なエラーが出て、うまく行きませんでした。

エラーの内容はこんな感じです。
Fatal error: Class ‘MDB2’ not found in /var/www/apps/eccube-2.11.5/data/class/SC_Query.php on line 76

管理者画面からログインしようとしてもログインすることが出来ません。

なんだろとソースを見ても、思い当たる節がない。。。
ローカルではうまく動いているのに。。ということでGoogle先生に聞いてみると、
APC云々の文字が。。。

おぉ。。そうか。
サーバ側ではAPCをonに設定しているので、エラーが出ているとのこと。。
※APCとは、簡単にいうとPHPのパフォーマンスを向上させるPHP拡張モジュールのことです。

でも、おかしいな。。
そのサーバでは、EC-CUBEの他のテストサイトはうまく動いているので、なにか腑に落ちません。
ということで、もう少し調べてみると、どうやらEC-CUBE2.12系から、APCによる不具合の修正対応が入っているとのこと。
EC-CUBEのTracに上がっておりました。
詳しくはこちら。
http://svn.ec-cube.net/open_trac/ticket/1340

なるほどですね〜。他のテストサイトは全てEC-CUBE2.12系だったので、問題なく動いていたようです。

では、2.11系ではどのように修正すればいいかというと、
以下が修正点です。
修正ファイル
data/class/helper/SC_Helper_Session.php

修正箇所は35行目あたりに一行追加するだけです。

  /**
      * デフォルトコンストラクタ.
      *
      * 各関数をセッションハンドラに保存する
      */
     function SC_Helper_Session() {
         $this->objDb = new SC_Helper_DB_Ex();
         session_set_save_handler(array(&$this, 'sfSessOpen'),
                                  array(&$this, 'sfSessClose'),
                                  array(&$this, 'sfSessRead'),
                                  array(&$this, 'sfSessWrite'),
                                  array(&$this, 'sfSessDestroy'),
                                  array(&$this, 'sfSessGc'));  
     //35行目あたり
        register_shutdown_function('session_write_close'); //←これを追加
     }

これだけです。

で、実際修正して、アップしてみると
無事動きました。

素晴らしい!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です