EC-CUBE2のCSVアップロードで「入力されていません」エラー

2016.11.25

EC-CUBE2の管理画面「商品登録CSV」から商品情報の一括アップロード作業をしていた時のこと。
いつも通りCSVファイルを選択して商品情報をアップロードしたら「●●が入力されていません。」のエラーが表示されました。
あれぇ?と思ってCSVを確認してみても、●●にはデータが有ります。10回は確認したので間違い有りません。にも関わらず、何度トライしても「入力されていません。」のエラーが出続けます。

色々と調べて、ひとまず解決したので備忘録です。

環境

サーバー情報

EC-CUBEバージョン 2.13.5
PHPバージョン 5.6.27
DBバージョン MySQL 5.1.73

状況

  • 画面:商品登録CSV
  • 実行した処理:CSVアップロード
  • 現象1:「入力されていません」エラーが出る
  • 現象2:CSVの該当項目にはデータが入っている
  • 調査結果1:プログラムのエラーチェック部分でパラメータの中身を見ると該当項目は空になっている(ダンプで確認)
  • 調査結果2:調査1のパラメータの中を見ると、特定の項目以降全データが抜け落ちている
  • 調査結果3:調査2の『特定の項目』はレコード毎に異なる
  • 調査結果4:データが一切抜けていないレコードも有る(大多数は抜けてない)

以上は分かりました。試しにデータ抜けが発生しているレコードをゴソっと削除して再度アップロードを試すと問題なくアップロード完了。やっぱりデータが抜け落ちているのがエラーの原因みたいです。

じゃあ何故抜けるのか。以下2点が怪しそうです。

  • データが抜ける最初のカラムに何かしら問題が有る
  • 一度にアップロードできるサイズの上限を超えている

手始めに『データが抜ける最初のカラム』に問題がないか確認してみると、文字列「あいうえお」が1000字分詰まっているだけでした。
てっきりカンマや特殊記号などが悪さをして落ちていると予想したのですが、入っていたのはただの文字列。前後のカラムも同じような内容です。読みが外れました。

となると、サイズが怪しい。

エラー原因

CSVに関連する設定回りを調べてみたところ、見事読みが大当たり。
データ抜けの原因は、CSVアップロードの文字数制限でした。EC-CUBEでは、CSVアップロード用の設定として「1レコードの最大文字数」が設定されています。その1行の文字数制限を越えてしまったみたいです。

調べるとCSV_LINE_MAXの設定が10000になっていました。つまり許容される最大文字数は10,000文字です。それに対してエラーが出ていたカラムの総文字数は約20,000文字、そりゃ抜け落ちますよ。

※CSV_LINE_MAXは管理画面の「システム設定>パラメーター設定」を開いて「CSV_LINE_MAX」を探すと見つかります。

と言うことで、対応方法は1レコードの最大文字数を上げるか、CSVの文字数を削るか、どちらかになるかと思います。以上です!

関連する記事