IT女子のお気に入りフォルダ

管理人の備忘録と実践を兼ねた(出来るだけ)役に立つ情報を配信するブログです。

EC-CUBEで商品規格が多いときに出るエラー対処

EC-CUBEで商品の規格を登録しているときに壁にぶちあたりました。
規格1と規格2を登録しようとすると確認画面では何もエラーは出ず、登録完了画面でシステムエラーが出ちゃうのです。

ひとまず落ち着いてログの確認(内心バクバク)
システム設定>EC-CUBEログ表示でエラーログファイルを読み込んでみました。
すると「DB処理でエラーが発生しました」と出ています。

null value in column “classcategory_id1” violates not-null constraint

どうやら、NULLじゃいけない「classcategory_id1」にNULLを入れようとして怒られたっぽい。
んー、なんでこんなことになってしまったのか、そんなカスタマイズした覚えも無く・・・
どよーんとした感じで検索してみると、同じような現象でお困りな方は多いようでたくさん情報が出てきました。

それらを参考にさせていただいた結果、phpの「max_input_vars」オプションの影響だとわかりました。
「max_input_vars」は一度の送信で受け付ける値の数を制限する項目で、この数値を超えるとデータが削除されてPOSTされてしまっているということらしい。
「max_input_vars」はデフォルトでは1000で設定されています。
現状の設定内容はシステム設定>システム情報にある「PHP情報」で確認できます。

このオプションはPHP5.3.9以降から実装されているようで、セキュリティ対策のためにバックポートしている環境も多いようです。

考えられる対策は、
・商品規格の数を減らす →これは無理です。減らしようがありません・・・
・カスタマイズする →出来たらいいんですけど・・・ね。
・PHPの設定を変える

というわけで「max_input_vars」の値を上げることで対応したいと思います。
(セキュリティ的にはあまりよろしくないと思うので、とりあえず10000くらいにします)

値の変更はphp.iniを編集するか、.htaccessで変更するかになりますが、php.iniを編集するとApacheの再起動が必要になってしまうので今回は.htaccessで対応します。

サーバーのルートディレクトリにある.htaccessに以下を追記します。

php_value max_input_vars 10000

一時対応って感じもしますが、無事完了。