ECCUBE3 商品CSV登録について

商品CSV登録拡張プラグイン for EC-CUBE3 プラグイン:https://www.ec-cube.net/products/detail.php?product_id=1395

を使うとダウンロードして、インポートできるようになる。デフォルトのECCUBE3だと、フォーマットが違う等でインポートできない。
このプラグインは、エラーを複数行出してくれる。デフォルトは一つのエラーしか出してくれない。

商品をダウンロードしてインポートする際、ファイルサイズが大きいとエラーになる。20Mib位。これは、ECCUBE3の商品CSV登録の設定ファイルから、制限を書き換える事で上限を緩和できる。しかし、サーバーの問題が出てくる。アップロード制限が掛かったり、サーバーがタイムアウトしてしまうので、php.iniで設定する。しかし、タイムアウトに関しては、ブラックボックスのサーバーが多い模様。調べた所、KDDIのCPIがphpを最も構えるので良いようだ。現在CPIで、アップロードをしているが、多くても5000件ずつくらいだ。

エクセルのCSVファイル編集時の注意点

CSVを構うとエラーが出る場合がある。まず、データを削除する際、デリートボタンを使用しない方が良いようだ。
右クリック>削除で削除しないと、空のデータが入っているのか、エラーになる事が分かった。もしくは、「数式と値のクリア」で削除する。

当初、空白のデータが文字列の頭やしっぽに入っている為。という情報があったのだが、当方はデリートで削除していたことが原因の模様。

フォーマットエラー

フォーマットエラーが出る場合、雛形をダウンロードしてみると良い。雛形の項目が無かったり、多いとエラーになる事を確認した。

プラグインによる影響もあると思う。プラグインを有効にする事で、雛形ファイルの項目が増える場合があると思う。ネットの情報だけで上手くいかないのは、おそらくそれが原因。今、3.0.13と3.0.15の2つインストールしてある。両方の雛形をダウンロードして、相手にそのままインポートすると、両者フォーマットエラーになる。勿論、自分にインポートするとフォーマットエラーとは出ない。「CSVデータがありません」と出る。

両者を比較すると、「送料」という項目の有無が関係していたのだ。送料を追加・削除して相手にインポートすると「CSVデータが存在しません」としっかり表示される。勿論、データを入れればインポートされる。

データが間違っている場合、例えば、商品種別IDが無かったり、商品IDが無かったりした場合、エラー項目が一覧で複数行出てくる。これは、商品CSV登録拡張プラグイン for EC-CUBE3を入れているから。入れてい無いと、たぶん1つずつしか表示されない。

要は、フォーマットエラーは項目(商品ID,公開ステータス等々)が原因で起こっている。そして、フォーマットエラーを直さないと、次のエラーは出てこないようだ。

これで、やっとインポートできる。

 

追記

商品CSV登録の制限解除

/src/Eccube/Form/Type/Admin/CscImportType.php

ここに、商品CSV登録の制限が記載されている。

new AssertFile(array(
'maxSize' => $app['config']['csv_size'] . 'M',
'maxSizeMessage' => 'CSVファイルは' . $app['config']['csv_size'] . 'M以下でアップロードしてください。',
)),

こんな感じに、

'maxSize' => '50' . 'M',

アップロード制限を5Mから50Mに変更する。

で、おそらく、これでアップロードすると、500エラーになるはずだ。
これは、サーバーの設定側によるもので、タイムアウトか、メモリの制限によるものだった。エラーの詳細は、サーバーのログを見て確認する。
ロリポップではログが確認できなかったので、CPIへサイトを移行した。

CPIなら、エラーログも出るし、php.iniを自由に変更できる。但し、タイムアウトの変更はできない。
検証してみると、CPIなら5000件位が限界。ファイルサイズは確認していないので分からない。
他の対策として、エンジニアからデータベースに直接入れる方法を提案された。

 

php.iniの設定方法

ECCUBE3の管理画面>設定>システム設定

「Ctrl+F」で検索画面を開いて「php.ini」と検索。
そうすると、どこにファイルがあるか分かります。ワードプレスのフォルダのphp.iniを読み込んでいるようでした。
そのファイルをFTPでエディタで開く

 

「memory_limit」を検索。

「50M」を、変更します。

 

「8000M」に変更。

memory_limitで500エラーになるのではなく、タイムアウトで500エラーになるまで粘ってもらいます。
今の所、運営からは連絡はないので大丈夫ですが、共用サーバーなのであまり迷惑を掛けると連絡が来るようです。

ひとまず、これで一度に5000件までアップロードできます。今回は20万件まで入れるので、それでも40回はアップロードする必要があります。
初めはデータ量が多いので、大変ですが、在庫の更新だけなら10000件以上はアップロードできるかと思います。

ECCUBE,その他

Posted by ぼっち