ググらずには前へ進めないフロントエンドエンジニアが書く、次はググらなくてもできますように…とメモを残すブログです!

最近の新しいサーバでEC-CUBE2系がうまくいかないとき

2018/02/07
⚠️投稿日または最終更新日から5年以上経過している内容です。

EC-CUBEの3系が浸透してきてからは2系が、 各種レンタルサーバーのクイックインストールから 案内が消えていますが… まだまだ弊社ではEC-CUBEの2系が現役で、 インストールしたり保守したりしています。

そこで最近の新しいサーバに2系をインストールしようとしたところ、 画面が真っ白に…ということがありました。 自分の会社では基本的にXserverを利用しておりますので、その前提で…。

これは原因は三つあって(場合によっては二つかも)

  • Xserverでは標準でPHPのバージョンが7を採用してる
  • 接続するMySqlのバージョンが不釣り合い
  • EC-CUBEに入っている.htaccessが邪魔をしている というのが上手くいかない原因です。

Xserverでは標準でPHPのバージョンが7を採用してる

これは結構簡単なことですが、ヒントが少ないのでハマりポイントのひとつです。 EC-CUBEの2系はPHP5.6までしか対応できていないので、 PHP7だと完全に動きません。https://www.ec-cube.net/news/detail.php?news_id=290 ↑のように、PHP7に対応したバージョンもリリースされているようですが、 アルファーバージョン(テスト段階)ですので、 実際にクライアントワークではあまり使えないと判断しています。 なので、サーバのPHPのバージョンを7から5.6まで下げざるを得ません。 レンタルサーバだったらコントロールパネルからすぐに設定が見つかると思います。

接続するMySqlのバージョンが不釣り合い

難しいことはわかりませんが、データーベースへ接続する際に、 バージョンによってプログラムが少し違うようです。 https://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=16981&forum=2 ↑の投稿のように、本体プログラムにすこし手を加えてあげないといけません。

/data/class/db/dbfactory/SC_DB_DBFactory_MYSQL.php または /data/class_extends/db_extends/dbfactory/SC_DB_DBFactory_MYSQL_Ex.php

php
/**
 * 各 DB に応じた SC_Query での初期化を行う
 *
 * @param  SC_Query $objQuery SC_Query インスタンス
 * @return void
 */
public function initObjQuery(SC_Query &$objQuery)
{
    $val = $objQuery->getOne('select version()');
    if (strcmp($val,'5.7.5')) {
      $objQuery->exec('SET SESSION default_storage_engine = InnoDB');
    } else {
      $objQuery->exec('SET SESSION storage_enging = InnoDB');
    }

    $objQuery->exec("SET SESSION sql_mode = 'ANSI'");
}

EC-CUBEに入っている.htaccessが邪魔をしている

サーバによると思いますが、EC-CUBEのファイルの中に標準で入っている html/.htaccessが動作を邪魔している可能性があります。 そういうときは思い切ってそのファイルを削除すると上手くいきます。 そもそも念のために...という感じで入っているのでほとんどの場合問題が無いはずです。 またhtmlフォルダ直下以外の.htaccessは削除されない方がよいです。

間が空くと忘れてしまうので、これで忘れないはず…。