Magentoで1,000件以上のデータに一括操作をする場合
この記事は公開から 1年以上が経過しています。現在の最新情報との整合性については弊社では一切の責任を負いかねます。
Magentoでは1万点以上の商品を普通に取り扱うことができます。
相応のサーバ性能が求められますが、アプリケーションを大規模にチューニングしたり、改造する必要はありません。
ですが、1,000件以上のデータに対して一括操作をする場合には注意が必要です。
1,000件以上のデータを一括で扱うようなシーンとは
Magentoの管理画面では以下のようなデータに対し、1,000件以上の一括操作をすることがありえます。
- 商品
- 顧客
- ニュースレター購読者
- 注文関係
これらのデータを一覧表示する機能(Gridと呼びます)では、今表示しているデータだけでなく、検索結果のデータ全てに対して一括で処理をすることができます。
そのため、1,000件という壁は比較的頻繁に超えてしまうケースが起きえます。
そして、1,000件を超えてデータを一括処理しようとすると、Magentoを動かしているPHPがエラーを起こしてしまうことがあるのです。
問題の原因
問題の原因は、PHPの仕様がPHP5.3.9から変わったことにあります。もうずいぶん前の仕様変更なのですが、PHPの設定ファイルである、php.iniを変更しないままアップデートをしていると、この問題に直面することになります。
PHP5.3.9では、「max_input_vars」という設定値が新たに追加されていて、この値が標準では1,000であることが、この問題の原因となっています。
「max_input_vars」 は「hashdos」と呼ばれる攻撃手法の対策に設けられたのですが、セキュリティ面の強化が行われたために、意識していないと運用時に1,000件以上のデータを一括処理できないという問題に直面するわけです。
対策方法
この問題の対策方法は3通りあります。
PHPの設定を変更し、1,000以上の値をmax_input_varsにセットする
max_input_varsの値を増やすことでこの問題を一時的に回避します。
ただし、本来セキュリティ目的で設けられたパラメータを増やすことは、セキュリティ性を下げることになるので、あまりおすすめはできません。あくまでも一時しのぎです。
1,000件以上の一括処理を管理画面から行わない
一括処理はCSVによるデータ投入やバッチ処理に委ね、管理画面からは操作しないようにします。
システムの改修や機能追加が必要になりますが、セキュリティ性は維持したままで運用ができます。
管理画面用のサーバをわけて、アクセス制限を施した上でmax_input_varsの値を増やす
管理画面専用のサーバを設けることで、PHPの設定をそのサーバだけわけます。
こうすることで、公開画面用サーバとは異なる設定で、関係者だけが使う環境を維持できます。
ただ、維持費が増えるので予算に余力がある方向けです。
いずれの方法もこの問題を根治させることはできません。
セキュリティの観点からみると、多すぎる入力値は害悪です。
運用の観点からは一括して多くのデータを処理したほうが作業効率はよいので、無用の制限は害悪です。
上手くバランスを取りながら、妥協点を見つけていくことが、この問題を解決するためには必要でしょう。
- お知らせ (34)
- Magento Open Source (169)
- Adobe Commerce (86)
- Magentoトピックス (349)
- Magentoバージョンアップ (11)
- OroCommerce (1)
- AkeneoPIM (16)
- Shopware (26)
- 世界のプライバシー保護規制 (11)
- OroCRM (14)
- Typo3 (9)
- イベント (27)
- Mage-OS (1)
- エクステンションリリース情報 (75)
- Mautic (1)