カテゴリー : EC-CUBE

EC-CUBEのインストール要件チェッカー

今回、freetype2の一件で時間的&精神的にダメージを食らったので、
同じ事を繰り返さない様に、簡易チェッカーを作ってみた。

実行するとこんな感じになる。

このチェッカーについては、一応ちゃんと動作試験済み。
ただ、「じゃあ実際に必須ライブラリ・任意ライブラリがないと動かないのかどうか」は
知りません。試す気もないですw

適当に保存してPHPとして動かせば、結果がすぐに見れます。

<?php
/**
*  EC-CUBE ソフトウェア要件チェック
*  Copyright(c) 2013 project-toa Inc. All Rights Reserved.
*  @version 201304070000
*  ソフトウェア要件を一発でチェックする為のものです。
*  適当にウェブサーバにアップして閲覧して下さい。
*/
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
<title>EC-CUBE ソフトウェア要件チェック</title>
<style type="text/css">
<!--
div#body{margin:20px 50px;}
h1{font-size:24px;}
p{margin:10px;}
div#caution {
width:600px;
font-size:12px;
border:1px solid #000000;
}
div.border{
width:424px;
border:1px solid #000000;
margin-bottom:10px;
}
div.float{
width:200px;
height:20px;
padding: 5px;
float:left;
border:1px solid #000000;
}
br.both{
clear:both;
}
-->
</style>
</head>
<body>
<div id="body">
<h1>EC-CUBE2.12系 ソフトウェア要件チェック</h1>

<div id="caution">
※このチェックツールは、2013/04/07時点のEC-CUBE ver2.12系に対する<br />
ソフトウェア要件に基づいて制作されています。<br />
最新のソフトウェア要件については、<a href="http://www.ec-cube.net/product/system.php" target="_blank">公式サイト</a>より確認して下さい。<br />
また、「WEBサーバ」「言語」「データベース」の項目につきましては別途ご確認下さい。
</div>

<p>1.必須PHPライブラリ</p>
<div class="border">
<div class="float">pgsqlまたはmysql</div>
<div class="float">pgsql : <?php if(function_exists('pg_connect')){ ?>○<?php }else{ ?>×<?php }?> / mysql : <?php if(function_exists('mysql_connect')){ ?>○<?php }else{ ?>×<?php }?></div>
<br class="both" />

<div class="float">gd</div>
<div class="float"><?php if(function_exists('gd_info')){ ?>○<?php }else{ ?>×<?php }?></div>
<br class="both" />

<div class="float">freetype2</div>
<div class="float"><?php if(function_exists('gd_info')){$gd_info = gd_info();if($gd_info['FreeType Support']){ ?>○<?php }else{ ?>×<?php }}else{ ?>×<?php }?></div>
<br class="both" />

<div class="float">mbstring</div>
<div class="float"><?php if(function_exists('mb_get_info')){ ?>○<?php }else{ ?>×<?php }?></div>
<br class="both" />

<div class="float">zlib</div>
<div class="float"><?php if(function_exists('gzopen')){ ?>○<?php }else{ ?>×<?php }?></div>
<br class="both" />

<div class="float">ctype</div>
<div class="float"><?php if(function_exists('ctype_alpha')){ ?>○<?php }else{ ?>×<?php }?></div>
<br class="both" />

<div class="float">spl(PHP5.3.0未満の場合)</div>
<div class="float"><?php if(function_exists('spl_classes')){ ?>○<?php }else{ ?>×<?php }?></div>
<br class="both" />

<div class="float">session</div>
<div class="float"><?php if(function_exists('session_cache_expire')){ ?>○<?php }else{ ?>×<?php }?></div>
<br class="both" />
</div>

<p>2.推奨PHPライブラリ</p>

<div class="border">
<div class="float">JSON</div>
<div class="float"><?php if(function_exists('json_encode')){ ?>○<?php }else{ ?>×<?php }?></div>
<br class="both" />

<div class="float">xml</div>
<div class="float"><?php if(function_exists('xml_set_object')){ ?>○<?php }else{ ?>×<?php }?></div>
<br class="both" />

<div class="float">OpenSSL</div>
<div class="float"><?php if(function_exists('openssl_sign')){ ?>○<?php }else{ ?>×<?php }?></div>
<br class="both" />

<div class="float">cURL</div>
<div class="float"><?php if(function_exists('curl_init')){ ?>○<?php }else{ ?>×<?php }?></div>
<br class="both" />

<div class="float">hash</div>
<div class="float"><?php if(function_exists('hash')){ ?>○<?php }else{ ?>×<?php }?></div>
<br class="both" />

<div class="float">mhash(PHP5.3.0未満の場合)</div>
<div class="float"><?php if(function_exists('mhash')){ ?>○<?php }else{ ?>×<?php }?></div>
<br class="both" />

<div class="float">mcrypt</div>
<div class="float"><?php if(function_exists('mcrypt_generic')){ ?>○<?php }else{ ?>×<?php }?></div>
<br class="both" />

<div class="float">zip</div>
<div class="float"><?php if(function_exists('zip_open')){ ?>○<?php }else{ ?>×<?php }?></div>
<br class="both" />
</div>
</div>
</body>
</html>

EC-CUBE without freetype2

なんか色々納得いかないなぁと思いつつ、とりあえず自分でソース書いてみた。

/data/page_extends/admin/total/LC_Page_Admin_Total_Ex.php

function init() {
parent::init();
  // ここから追記
  // GDライブラリのインストール判定をより強固に
  if($this->install_GD)
  {
    // FreeTypeが入っていない場合、$this->install_GDをFALSEにする
    $gd_info = gd_info();
    $this->install_GD = $gd_info["FreeType Support"] ? true : false;
  }
  // ここまで追記
}

何が言いたいかというと、
なんでGDライブラリが入っているかどうかのチェックはしているのに
freetypeが入っているかどうかのチェックは行っていないのか、ということ。

おかげで、「GDが入っていてもfreetypeが入っていない」環境で統計を開こうとしても
freetype系の処理がエラーになる。

そのくせ、GDが入ってない環境ならエラーにならない(はず)。

というかそもそも「必須PHPライブラリ」って書かれているのに
インストール時にチェックされないよね。。。。。
wordpressだっけ、インストール時にきっちりチェックしてくれるの。
ああいう感じにしたらいいのに。

おかげで何が悪いのか調べるのに結構な時間を要した。

これってどうなの!
…と言いつつ、今は忙しいから開発コミュニティに情報を投げたりしないんだが。
忙しくなくなったら投げるでしょう。きっと。

EC-CUBEを実際に最新版にしてみた

前回の記事を踏まえて、実作業。
コピーした環境で上げるので、バックアップについては省略します。

【2.12.1→2.12.2】
ファイル数はそんなに多くなかったので、そこまで手間ではなかった。
5〜10分くらいですかね。

動作試験してみると、2.12.3に少し近い感じがするというか、
2.12.2では直っていない不具合が改善されていたりする。

リリース版よりも少しだけ2.12.3に近い、といった所ですかね。

【2.12.2→2.12.3】
ファイル数が多すぎて、30分以上かかったでしょうか…。
テンプレートなどの書き換えをしないように留意して作業しないとなので
かなり気を遣って作業しました。

それにしても、全部手動でマージは手間ですね。
何かスクリプト書いて一括で…ってできたら楽なんでしょうけど。
スクリプトを書く気力もないので、とりあえずやめておきました。

こちらはリリース版の2.12.3と全く同じ感じですが、
いかんせん、とにかく膨大なファイル量だったので
「こんなに頑張ってやる価値あるんだろうか」と少し思いました。

そして、何故か管理画面の売上集計機能でエラーが出た。
2.12.2と2.12.3では出ないのに、2.12.2→2.12.3ではエラーが出るという事は
何かが悪いんだろうけど、ソースの比較をしまくってもわからなかった。

とりあえず、/data/class/pages/admin/total/LC_Page_Admin_Total.phpだけ
2.12.2に戻したら動いたので、それで良いや、ということにした。

あ、どちらのアップデートにも言える事ですが、
独自改修している場合は、当該部分には相当気を遣う必要がありますね。
/data/class_extends内に独自改修していたとしても
class内の元ファイルが更新されているから動作しなくなった、という事は
十分に考えられるので、独自改修していた部分は入念に動作試験したほうが
良い、という事ですかね。
…ついでに、2.12.3の更新ではclass_extends内のファイルも更新対象になっているので
独自改修自体を上書きしてしまわないように、とかですか。

とりあえず、疲れたので今回はここで終了で…。

EC-CUBE 2.12系のマイナーバージョンアップ

※実際にこの手順で作業して失敗しても当方は責任を負えませんのでご了承下さい。

EC-CUBE2.12系について私的メモ。

私はあまり今までEC-CUBEに携わってこなかったので、基礎知識が全くないんです。
で、マイナーバージョンアップについての記載がほとんどないので、
「実際何が修正されてるの?」「で、上書きするだけでいいの?」とかが
情報が少ないこともあり、わからなさすぎて困ったわけで。

が、現状で実際に2.12.1 & 2.12.2の管理画面等で不具合に遭遇したりして、不便を感じる。
さっさと2.12.3に上げてしまいたい…。

でも開発コミュニティ内では何やら難しい事が書かれている。
そもそも「難しそう」というか、「じゃあどうすればいいのさ」の答えがどこにもなかった。
ので、面倒だと思いつつ、いろいろ調べてみた。

EC-CUBEのダウンロードページ下部より抜粋
http://www.ec-cube.net/download/

EC-CUBE のバージョン番号は aa.bb や aa.bb.cc の形式になります。
「aa」 は、設計思想を含めた大幅なバージョンアップで更新されます。

「bb」 は、機能追加を伴うバージョンアップで更新されます。
(データベース構成やテンプレートファイルの変更を伴います。)

「cc」 は、バグフィックス等の機能追加を伴わないバージョンアップで更新されます。
(データベース構成やテンプレートファイルの変更は基本的に実施されません。)

ということは、マイナーバージョンアップは基本的にファイル上書きするだけじゃん。
なんだったんだよあの思わせぶりな書き込みは…と思いつつ、それでも不安だったので
もう少し掘り下げて調べてみた。

【2.12.1→2.12.2】

更新ファイル
http://www.ec-cube.net/download/からダウンロードできる
修正概要(開発trac内)
http://svn.ec-cube.net/open_trac/query?status=closed&group=resolution&milestone=EC-CUBE2.12.2
修正詳細(開発trac内)
http://svn.ec-cube.net/open_trac/changeset?old_path=%2Fbranches%2Fversion-2_12-dev&old=21959&new_path=%2Fbranches%2Fversion-2_12-dev&new=22009

…詳細を流し読みした限りでは、typo修正などの小さめの修正が多めのようですね。
念のために2.12.1と2.12.2で/html/install/sql/create_table_mysql.sqlを比べてみましたが
全く同じ内容だったので、DBに変更がないのも確認できました。
/data/Smarty/templates内の各種ファイルは運用中のものを上書きしないように気をつけないといけないですが、
それ以外は普通に上書きして問題なさそうですね。

何かあってからでは困るから、ちゃんと手順を踏む!という事で作業手順を考えてみますと、
1.EC-CUBEで使用しているデータベースと全ファイルをバックアップする
2.更新ファイル内のdataフォルダ内の各ファイルをマージする
3.動作試験を行う
…という感じでしょうか。
正直データベースはバックアップ取る必要あるんだろうかとも思いましたが、
何かあった際に2.12.1に戻せる、という状態を作っておく事が肝要なので
実際に作業するとしたら、こんな感じになるでしょう。

留意点としては、2.12.1内で独自で改修した部分があれば、それを上書きしてしまわないように
別途注意が必要、というところでしょうか。

※後日、実作業するので何かあれば追記します

【2.12.2→2.12.3】

更新ファイル
http://www.ec-cube.net/download/からダウンロードできる
修正概要(開発tracのチケット)
http://svn.ec-cube.net/open_trac/query?status=closed&group=resolution&milestone=EC-CUBE2.12.3
修正詳細(開発trac内)
http://svn.ec-cube.net/open_trac/changeset?old_path=%2Ftags%2Feccube-2.12.2&old=22013&new_path=%2Ftags%2Feccube-2.12.3&new=22513

こちらは詳細が読みにくいですね…。
色々見てみた限りでは、開発中に年を越した都合でCopyright更新があり、
多めのファイル更新になっているようです。
が、他もそこまで重度の更新はないように見えます。

こちらも念のために2.12.2と2.12.3で/html/install/sql/create_table_mysql.sqlを比べてみましたが
全く同じ内容だったので、DBに変更がないのも確認できました。

ということで、こちらも2.12.1→2.12.2同様、運用中のテンプレート上書きや独自改修部分の上書きに
気をつけて手動マージで問題なさそうです。

1.EC-CUBEで使用しているデータベースと全ファイルをバックアップする
2.更新ファイル内のdataフォルダ内とhtmlフォルダ内の各ファイルをマージする
3.動作試験を行う

ですかね。
まぁ、細かい事を言うならば/html/installフォルダとかは入れる必要ないと思いますが。

※後日、実作業するので何かあれば追記します
2.12.1→2.12.2→2.12.3と、2.12.2→2.12.3と、2.12.3の3本で動作比較する予定です

PHP5.4とec-cube

ec-cubeはPHP5.4系を意識した修正は行われていないなぁ、という事で。

エラーレベルの話。
PHP5.4.0からはE_ALLにE_STRICTが含まれるようになっている。
ということで、管理画面の統計など、ちょっとしたタイミングでエラーが出てくる。

/data/class/SC_Initial.php内には

function setErrorReporting() {
error_reporting(E_ALL & ~E_NOTICE);
// PHP 5.3.0対応
if (error_reporting() > 6143) {
error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);
}
}

と記載があるが、とりあえずコイツにE_STRICTを加えて

function setErrorReporting() {
error_reporting(E_ALL & ~E_NOTICE);
// PHP 5.3.0対応
if (error_reporting() > 6143) {
error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT);
}
}

ってすればエラーは出なくなる。

PHP5.5 beta1も出てきているみたいだし、更新して使えなくなる(or 使い勝手が悪くなる)
という事は多く出てきそうですね…。

ECCUBEの不具合対処法

とりあえず普通にインストールを行って色々触ってみたが、色々不便だったので
デバッグモードをtrueにして調べてみることに。

デバッグモードは管理画面「システム設定」>「パラメータ設定」で設定可能です。

・郵便番号更新が行えない
⇒data/downloadsに書き込み権限が必要です
(これもインストール時にチェックしてくれればいいのに…)

こういうの、どこに投げたらいいんすかね。

EC-CUBE 2.11.5のインストール

tar.gzをダウンロードしてそのまま入れるだけでは入ってくれないらしい。

・さまざまなディレクトリに書き込み権限が必要
・インストール中に指摘されないが、configディレクトリにも書き込み権限が必要

など、不具合と呼べそうなものまである。。。。。

せっかくtarで配布してくれているのだから、ディレクトリの書き込み権限くらいは
適用させた上で配布してくれれば良いのに。

configの書き込み権限も、セットアップ中で指摘してくれるべきだと思うし。