ECCUBE 2.4.1から2.13.1へアップデート

2.4.1を2.13.1へ移行の作業。
数々の壁にぶち当たったので、それぞれヒントになればと思いメモしておく。

デザインを調整。ある程度目処が立ったところで、
データの移行のテスト。
稼働しているサイトだから手順を記録して移行日に最短で最新データに上書きしないといけない。

1.カテゴリはCSVの書き出し&読み込みで。
2.商品データをCSVに書き出して編集してアップしようかなと思ったものの、商品情報の文字列のせいでエクセルでは上手く編集できない。

そこでモジュール使う方がいいのかと、
2.11と2.12をインストールし、モジュールを取得して2.4.1のデータをエクスポートするまでは上手くいくも、2.11にインポートできない。システムエラー。
これを使える様に調整するのは雲をつかむ様な作業。

これで半日を棒に振ってしまった。

調べてると、エラーで出来ないからテーブルコピーで構造をいじってCSVインポートした人もいる。
そっか、結局は力技ですか。
当初はそのつもりだったので、必要なテーブルの構造を確認して進める事にする。
最初からそうしろよってね。

コピーしたのは、
商品、顧客、受注に関するテーブル。
あとは手動で。
※決済種別や発送種別とかは番号を合わせとかないといけない。

【1】必要なテーブルの構造とデータをエクスポート
(コンソールは使えないサーバなのでウェブブラウザからの操作のみとなる)
※postgresからMysqlなのでCREATE文のtimestamp型の場合 without time zoneは削除
あとtimestamp複数の場合、now()を利用するカラム以外にデフォルト値を入れる
例)カラム名 timestamp NOT NULL DEFAULT ‘0000-00-00 00:00:00’,

機種依存文字の問題発生。
phpPgAdminからエクスポート機能を使用するとどうしても文字化けが回避できない。
画面で文字化けしない機種でsql表示させ、コピーしてエクセルとテキストエディタで調整し、インポート用のcsvを作成する。

もしくは、XHTMLで書き出し、それを加工する。

(アクセスがあると早いんだけど…あいにく持っていない。)

一旦、テストテーブルに入れる。

余計なカラムを削除しつつインポート。
(※dtb_orderは不要カラム削除の前に、….)

管理画面でどうやらPOSTの値が文字化け。
phpの問題だな?
php.iniが効いてないっぽい。

すっきり解決。

dtb_orderは不要カラム削除の前に、
dtb_orderからdtb_shippingへ入れる為にテーブルコピーして加工。
CREATE table dtb_shipping AS SELECT * FROM dtb_order;

dtb_order_detailのproduct_class_idにclasscategory_id1でselectし、update。

UPDATE dtb_order_detail,dtb_products_class
set dtb_order_detail.product_class_id= dtb_products_class.product_class_id
where dtb_order_detail.classcategory_id1= dtb_products_class.classcategory_id1 and dtb_order_detail.classcategory_id1>0;

order_detail_idがなくてインポートできない!

エクセルで割り振る。。

完了~。

会員ログインできない。
config.php AUTH_MAGICの値を移行する。
2.4.1は/data/mtb_constants_init.phpにある。
できた。

しまった、管理者ログインのパスワードを再設定するを忘れる←注意

商品種別
product_type_idが0で機能しない
UPDATE dtb_products_class set product_type_id=1;

DNS切り替え後、
自分のルーターを再起動。

商品規格の更新でシステムエラー
dtb_products_classのproduct_class_idの最大値を
dtb_products_class_product_class_id_seqに入れるだけではだめ。
オートインクリメントの値をproduct_class_idの最大値+1に更新しないといけない。

念のため手動でinsertしたテーブルの他のシーケンス値とオートインクリメントの値を確認し、合わせておく。

“ECCUBE 2.4.1から2.13.1へアップデート” の続きを読む

IFTTT での WordPress のアクティベート

IFTTT での WordPress のアクティベートができない。
Xserverを利用している場合できないという記事を数件発見する。

プリントされた設定ファイルをぼんやり眺めてるとXserverのServerPanel左メニューに
「WordPressセキュリティ設定」
というのを見つけた。

国外IPアクセス制限設定というのがありました!

解除して無事アクティベート完了。

“IFTTT での WordPress のアクティベート” の続きを読む

MT4 スパム対策

スパム判断で振り分けられる様になったけれど、
根本的には解決になっていない。

htaccessでリファラーが自サイトで無かったらアクセス出来ない様にするというのを試したが、効果がなかった。

mt-comments.cgiをリネームするとかの方法は試していないけれど、
ちょっと面倒だったので、違う方法を試してみる事にした。

MT-Keystrokesというプラグインの導入。
参考元:http://world-travelers.info/blog/2013/07/30#.VBu1xb_QZkm

投稿ボタンを押さない限りコメントできないらしい。

keystrokes.plをダウンロードして、

keystrokes.pl の64行目のバージョンを自分のMTバージョンに書き換える。

プラグインフォルダーに入れる。

コメント欄のフォームにタグ(赤字の部分)を追加。


<form method=”post” action=”/mt/mt-comments.cgi”
name=”comments_form”>

<$MTKeystrokes$>

<input type=”hidden” id=”entry_id” name=”author” />

<input id=”author” name=”author” />


<label for=”text”>Comments:</label>

<textarea id=”text” name=”text” cols=”50″ onkeypress=”keystrokes(this.form)”></textarea>

<input type=”button” onclick=”window.close()” value=”Cancel” />

<input type=”button” onclick=”window.close()” value=”&nbsp;Cancel&nbsp;” />

<input type=”submit” name=”preview” value=”確認” />

<input type=”submit” onclick=”keystrokes(this.form)” name=”post” value=”投稿” />

1日様子を見て、スパムが無くなった事を確認。
これは効果があった。

“MT4 スパム対策” の続きを読む

スパムフィルター

コメントできないのでという声を聞き、
削除していたコメント欄を復元したら、速攻スパムが入って来た。

そこで、
(1)
BanASCIIというプラグインを入れた。
MT4にも対応しているということで。
使い方は簡単。
プラグインフォルダに掘り込んでパーミッション変えるだけ。
そしたら半角英数字だけの投稿をスパム認定してくれる。

(2)
もともと入っていた
SpamLookup – Keyword Filter 2.1
というプラグインの設定をした。
スパムにするキーワードに、

ルイヴィトン
gucci
http://

を入れた。

様子をうかがっていると順調にスパム認定され振り分けられた。

とりあえず、当面これでよし。

“スパムフィルター” の続きを読む

カテゴリの特定グループを数量限定表示

MTでカテゴリをある特定のタグのものを限定数表示したい。
カウント数を増やしていって、希望の数以下の場合のみ表示という方法をとった。
<MTSubCategories top=”1″ sort_by=”user_custom”>
<mt:If tag=”flag” eq=”ぞうさん”>
<MTSetVar name=”count” value=”1″ op=”+”>
<MTIf name=”count” lt=”7″>
☆ここにコンテンツ表示☆
</mt:If>
</mt:If>
</MTSubCategories>

“カテゴリの特定グループを数量限定表示” の続きを読む

EC-CUBEシステムエラーが発生しました。大変お手数ですが、サイト管理者までご連絡ください。

ある日突然、

EC-CUBEシステムエラーが発生しました。大変お手数ですが、サイト管理者までご連絡ください。

と表示され管理画面にログインできなくなる。

エラーの理由はわからない。
サイトは死んでいないし、DBも生きている。

エラーログを見る事が出来る。
/data/logs/site.log

ログを見てもよくわからない。

同じ様なエラーの人の対処を見ていると、

payment_idの重複によるエラーというのがあったため、

phpPgAdminより確認すると、重複しているものを発見。
重複したpayment_idを変更し、ログインできる様になった。

なぜ、急に重複したのか…

思い当たる節は、前日にお支払い方法の並び順を操作していたという事。
あの機能は不具合があるのかもしれない。
ほかの並べ替えの機能も以前よりすっきり動かないし、
不具合があるに違いない。

そちらの追求はまた別の機会に。

“EC-CUBEシステムエラーが発生しました。大変お手数ですが、サイト管理者までご連絡ください。” の続きを読む

IEからのファイルアップロードができない

特定の人だけ、IEからファイルアップロードが出来ない。

今回の場合、原因はIEでjpegファイルは、MIME-Typeが”image/pjpeg”として扱われるためだった。

jpegしかアップできないように制限していたところをpjpegも通るようにした。
($_FILES[“photo”][“type”] == “image/jpeg” or $_FILES[“photo”][“type”] == “image/pjpeg”)

“IEからのファイルアップロードができない” の続きを読む

postgreSQLからmysqlへの移行で気を付けたい点

postgreSQLからmysqlへの移行で気を付けたい点

postgresqlで、ある小さなシステムを構築準備してました。
現状あるシステムをそちらに載せ変えるという事で、
既存のデータをそのまま使いたい。

最初に確認しておけばすんだ事だけど、postgresのDBエンコードがEUCで、
変更できない事がデータの移行テストの段階でわかった。
新規DB作成も許可されていなかった。

元のシステムがUTF8なので、機種依存丸付き文字がばんばん使われている。
それをそのまま使えるようにしたいし、新しい入れ物はUTF8でないといけない。

mysqlなら新規DBも作成できるし、そもそもUTF8だったので、
急遽つくりかえることにした。

その際、種々の問題が発生したので覚え書きを残しておく。

■データ型
timestump型はdatetime型にする。
(複数カラムあるため)

■php
関数名を「pg_」から「mysql_」に置換

mysql_fetch_objectは行番号指定で取得できないので、
mysql_data_seekでポインタ位置を指定する。

■福問い合わせ
サブクエリがまず展開されるので、サブクエリに無用な結果が含まれると
総当たりとなり、膨大になる。(反応遅い)
サブクエリのSELECT文はできるだけ条件を入れた方が良い。

UPDATE a_table,(SELECT * FROM b_table)o_table SET a_table.name=o_table.oldname where a_table.code=o_table.code and o_table.num=1;

UPDATE a_table,(SELECT * FROM b_table where num=1)o_table SET a_table.name=o_table.oldname where a_table.code=o_table.code;

■mysqlでは正規表現による置換が出来ない
これは面倒だったし、今回はpostgresに持ってって処理した。
ある特定の文字に挟まれた数値データをとりだしたかっただけなので、
それでいけたけれど、文字コードに影響される様な文字列だったらそれはできないし、
ステップ踏むしかないかな。
phpでREGEXPとREPLACEを使って置換する方法をとるとか。

以上、私のメモ書き。
素人なので表現や方法が間違ってるかもしれません。

昔は丸付き文字なんか、利用者の方に制限させて、
文字化けしたら利用者のせいにするとか普通だったけど、
今は丸付き文字も機種依存文字も使うもんね。
私は今も使わないけど。
“postgreSQLからmysqlへの移行で気を付けたい点” の続きを読む

サーバの引っ越し手順の覚え書き

これまで、引っ越しの際に必ず浸透問題うんぬんと言われていたけれど、
必ずしもそうとは限らない。
余裕があれば回避できる。

1)ネームサーバーが別の場合

旧サーバにてドメイン管理&ネームサーバをレンタルしている。

ドメインを新サーバとは切り離したサービスに移管&ネームサーバレンタル、
旧サーバ向けゾーン情報を設定し、新ネームサーバに切り替える。

平行して新サーバでのコンテンツやアカウントの設定を準備しておく

新しいネームサーバに完全に切り替わった後、
都合の良い日を設定し、ゾーン情報を新サーバ向けに設定。

TTLを短めに設定していれば、すぐに切り替わる。

TTLが短すぎるとリスクがある様なので、
切り替わった後、設定し直す方が良いのかもしれない。

ネームサーバが別サービスであるか、新サーバのゾーン設定の自由度が高くないとできない。

ネームサーバは別に用意しておいてなるべく変更しないというのが理想かもしれない。
webサーバやメールサーバの引っ越しの際、
ネームサーバの変更が無ければ、ゾーン情報の書き換えだけで済み、早ければ数分で切り替わる。

TTLの設定は、サービス会社によって対応が変わってくる。
自由に設定できる手段が無ければ、申請して2~3営業日とか、何万円とか言われる場合もある。

ドメインの管理はホスティング会社の付属サービスを利用するのではなく、
独立していた方が良いと、つくづく思いました。

“サーバの引っ越し手順の覚え書き” の続きを読む

カスタム投稿タイプ

カスタム投稿タイプで新着情報を設置。

functions.phpに追記。


/* カスタム投稿タイプの追加(新着) */
add_action( 'init', 'create_post_type_news' );

function create_post_type_news() {
register_post_type( 'news', /* post-type */
array(
'labels' => array(
'name' => __( '新着情報' ),
'singular_name' => __( '新着情報' )
),
'public' => true,
'rewrite' => true,
'menu_position' =>1, //管理画面で上から2番目
'supports' => array('title','editor','thumbnail','custom-fields','page-attributes'),
'has_archive' => true,
'has_archive' => 'news'
)
);
}

single-news.phpなど必要に応じて作成。

この後、忘れてはならないワンアクション。

管理画面>設定>パーマリンク設定
「変更を保存」←ボタンを押す。
これをしないとカスタム投稿タイプの表示が有効にならない。

サイドバーに表示させるには….
下記をsidebar.phpに追記。


<ul>
<?php
query_posts('showposts=10&post_type=news');
if (have_posts()) : while (have_posts()) : the_post();
?>
<li><a href="<?php the_permalink() ?>" title="<?php the_title(); ?>">
<?php the_title(); ?></a></li>
<?php endwhile; endif; ?>
</ul>

あーめんどくさい。

“カスタム投稿タイプ” の続きを読む