Edited at

EC-CUBE2系から2.17へのバージョンアップ方法

EC-CUBE2.17 は、 EC-CUBE2.13.5 を PHP7 に対応したバージョンです。

MySQL で約200%の高速化等、性能面でも大幅な改善 をされており、大量のトラフィックを支える大規模サイトや、共有レンタルサーバーなどで運用したい方におすすめです。


  • 必ずローカル環境またはテスト環境で実施してください

  • 2.13.5 からデータベースの変更はありません。

  • Git を使用してバージョン管理していないサイト向けの方法です。

  • 既に Git を導入されている方は 著作権表示等を置換 から進めると良いでしょう。

  • 2.13.5 と 2.17 の差分はこちら

著作権表記変更 の影響もあり、2.13.5 から 2.17 の差分はほぼ全ファイルに及びます。

また、 Composer でパッケージ管理をするようになったため、単純に差分ファイルを上書きしただけでは動作しませんのでご注意ください。


導入バージョンの EC-CUBE をクローン

# EC-CUBE 2.13.2 の例です

git clone https://github.com/EC-CUBE/ec-cube2.git -b eccube-2.13.2

EC-CUBE はリリースごとにタグがついています。

-b <導入バージョン> をつけるのがポイント


カスタマイズ済みの EC-CUBE を上書き

サーバー上のものを FTP や SCP などでダウンロードするなりして上書きしてください。

html の中に data を入れているサイトもあるかと思いますが、 先に clone した EC-CUBE と data ディレクトリの階層が一致していれば大丈夫です。

ssh が利用可能な場合は、以下のようにして上書きコピーできます。

cd ec-cube2

scp -rp user@hostname:/path/to/ec-cube/* .


著作権表示等を置換

LOCKON CO.,LTD.EC-CUBE CO.,LTD. になっていたり、バージョン番号がついていたりしますので、コンフリクトしないように置換しておきます。

普段お使いのエディタを使用しても大丈夫です。

export LANG=C # Mac の BSD sed を使う場合のおまじない

# 著作権表示を置換
find . -name '*.php' -print0 -or -name '*.tpl' -print0 -or -name '*.css' -print0 -or -name '*.js' -print0 | xargs -0 sed -i.bak 's/Copyright(c) .* LOCKON CO.,LTD. All Rights Reserved./Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved./'

find . -name '*.php' -print0 -or -name '*.tpl' -print0 -or -name '*.css' -print0 -or -name '*.js' -print0 | xargs -0 sed -i.bak 's|http://www.lockon.co.jp/|http://www.ec-cube.co.jp/|'

find . -name '*.php' -print0 -or -name '*.tpl' -print0 -or -name '*.css' -print0 -or -name '*.js' -print0 | xargs -0 sed -i.bak 's|LOCKON CO.,LTD.|EC-CUBE CO.,LTD.|'

# @version タグを置換
find . -name '*.php' -print0 -or -name '*.tpl' -print0 -or -name '*.css' -print0 -or -name '*.js' -print0 | xargs -0 sed -i.bak 's|@version $Id:.*$|@version $Id:$|'
find . -name '*.php' -print0 -or -name '*.tpl' -print0 -or -name '*.css' -print0 -or -name '*.js' -print0 | xargs -0 sed -i.bak 's|@version \$Id:\$|@version $Id$|'

# 参照代入の修正を置換
find . -name '*.php' -print0 | xargs -0 sed -i.bak 's|$objQuery =& SC_Query_Ex::getSingletonInstance();|$objQuery = SC_Query_Ex::getSingletonInstance();|'

## tpl の置換
find . -name '*.tpl' -print0 | xargs -0 sed -i.bak 's|\(.*\)=`\(.*\)`|\1="`\2`"|g'
find . -name '*.tpl' -print0 | xargs -0 sed -i.bak 's/if $\(.*\)|@count > 0/if !empty($\1)/g'

## 改行コードを置換(管理画面から編集すると CRLF になってしまうため)
find . -name '*.php' -or -name '*.tpl' -print0 | xargs -0 sed -i.bak 's/'$'\r//'

## 最後にバックアップファイルを削除
find . -name '*.bak' -delete


カスタマイズ内容をコミット

ここまでの内容をコミットしておきます。

コミットしておけば、いつでも戻すことができます。

git add .

git commit -m '独自カスタマイズ'


2.17 のブランチをマージ

2.17 の変更をマージします。

独自カスタマイズした箇所以外は、自動的に変更を取り込んでくれるはず。。

git fetch origin

git merge origin/master


コンフリクト解消

コンフリクトした箇所を手作業でマージします。

すべて解消したら、変更をコミットします。

data/config/config.php など、機密情報の含まれたファイルはコミットしないでください。不用意に Github などへ push してしまうと、不正アクセスの原因となります。

コンフリクトの解消方法は、こちらを参考にしてください → Git を使って EC-CUBE を簡単アップデート#番外-競合コンフリクトしてしまった時は


composer install コマンドを実行

EC-CUBE2.17 から、 PEAR や Smarty の外部ライブラリは、 3系、4系と同じく composer で管理するようになりました。

git merge が上手くいった場合は、 data/module の下から、これらのソースが削除されていますので、生成する必要があります。

https://getcomposer.org/download/

# composer のセットアップ

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php
php -r "unlink('composer-setup.php');"

# composer install コマンドの実行

php composer.phar install


デザインテンプレートや個別カスタマイズ箇所の修正

標準以外のデザインテンプレートを使用している場合は、 テンプレート名が default や、 sphone 以外になっていると思います。

これらは自動的にバージョンアップされませんので、 default や sphone との差分を確認しながら取り込む必要があります。

個別にカスタマイズした箇所で、 PHP7 に対応していない箇所がある場合は、個別に修正が必要です。


プラグインの修正

2.13 に対応しているプラグインでしたら、PHP7 で非推奨になった箇所の Warning が発生しつつも、多くはそのまま動作します。

しかし、 PHP7 で廃止された関数や構文を使用している場合は、個別に修正する必要があります。


data/config/config.php の修正

PHP7 になって mysql extension が廃止されたため、MySQL の場合のみ mysqli ドライバを使用する必要があります。

また、 DB_PORT は空文字を許さなくなったため、明示的に指定する必要があります。

デフォルト値の 3306 の場合は false でも可


data/config/config.php

// mysql を mysqli に変更

define('DB_TYPE', 'mysqli');
// DB_PORT を明示的に指定
define('DB_PORT', '3306');


動作確認

ここまでできれば、 Webサーバー上での動作確認ができると思います。

システムエラーが発生した場合は、 PHP7 に対応していないコードが含まれていると思われます。 data/logs/error.log をご確認ください


どうしても動かない場合は

開発コミュニティ や、こちらのコメント覧でご相談を!