Posted on

EC-CUBEでカートに商品を入れすぎるとエラー発生

EC-CUBE2.13(たぶん2系全て?)で商品を100個とか沢山カートに入れるとなぜかエラーが出てしまいます。

MySQLで、dtb_session.sess_dataにカートの内容を保持しており、このフィールドはTEXT型になっているんですが、調べてみるとどうもこのTEXT型ではサイズ(容量)が足りないようです。

結局、TEXT型を使ってたのをMEDIUMTEXT型に変更したらいけたのですが、まあ、通常のBtoC取引では100種類の商品も買うこと想定してなかったんでしょうね。

今回調べたTEXT型について以下にまとめます。
TEXT型には4つのタイプTINYTEXT、TEXT、MEDIUMTEXT、LONGTEXTがあります。

・TINYTEXT 最長255 バイト
・TEXT 最長65,535 バイト(64KB)
・MEDIUMTEXT 最長16,777,215 バイト(約1.6MB)
・LONGTEXT 最長4,294,967,295 バイト(約4.3GB)

カートのセッション情報を保存する、といった最長サイズで引っかかりそうなフィールドは、MEDIUMTEXTにしておいた方がよさそうですね。

(参考)http://webrescue.net/archives/4030

Posted on

CakePHP2系でCronを動かす

今までCakePHP1系ではCronを動かした事はあったのですが
CakePHP2系でCronを動かすのが初めてで動くようにするのに
つまづいたので備忘録として残しておきます。

シェルファイルを作るのはCakePHP1系と同じなのですが内容は次のようになります。
(ファイルへのパスは今回設置した環境用になっていますので適時ご自身の環境に合わせて下さい)
1系だと

#!/bin/sh
/var/www/cakephp/cake/console/cake cron action_name -app /var/www/cakephp/app

2系だと

#!/bin/sh
/usr/bin/php /var/www/cakephp/lib/Cake/Console/cake.php Cron action_name -app /var/www/cakephp/app

/usr/bin/phpがPHPの実行ファイルを指定
作ったシェルファイルをパーミッション755にしておきます。
/var/www/cakephp/lib/Cake/Console/cake.phpをパーミッション755にします。

次に実際の処理内容なのですが
1系の場合は/cakephp/app/vendors/shells/cron.phpに書いていたのを
2系の場合は/cakephp/app/Console/Command/にXXXXShell.phpというファイルを作ります。

内容は

Staff->find('all'); // コントローラーから呼ぶようにModelを呼べる
    }
}
?>