[PHP]フォームがPOSTできない!?送信項目数が多いときはmax_input_varsにご用心

CakePHPで10万件程度のマスタから条件検索してリストを作成して、それを加工してデータベースに登録する処理を書いていた時のこと。*1

ある上限を境にして、それ以降のPOSTデータが受け取れなくなった。
途中までは正常に登録できるのに、毎回同じ件数で登録が終わってしまう。

文字列も多かったからもしかしたら送信サイズの問題だろうか?
それともCakePHP側で何か制限がかかっているのか?

色々試行錯誤して調べた結果、PHP5.3.9以降から「max_input_vars」というディレクティブが追加されたそうだ。デフォルトで1000になっており、1000個以上の送信パラメータは削られてしまうらしい。

参考:PHP: 実行時設定 – Manual

知らなかったよー。

max_input_varsは「PHP_INI_PERDIR」なのでini_setでは変更できない。
今回はクローズドなシステムだし、.htaccessで対応した。

php_value max_input_vars 100000

一般向けのシステムでこんなパラメータの渡し方はしないと思うけど、もしやるならmax_input_varsは脆弱性につながるみたいだしAjaxで件数を分けて処理するかな。

  1. メール送信先リストを作成するのにありがちなやつ。今回は違うけど []
スポンサーリンク
336x280_1
336x280_1

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
336x280_1