風柳メモ

ソフトウェア・プログラミング関連の覚書が中心

【覚書】PHPアプリにPOSTする際には入力変数の制限に注意

サーバ側の設定にもよるみたいですが、入力変数(ペイロード中のパラメータp=0&p=1&...)が一定数を超えると制限がかかるんですね。
常識なのかもしれないのですが、知らなかったのでしばらくはまっていました。

max_input_vars integer
入力変数 を最大で何個まで受け付けるかを指定します (この制限は、スーパーグローバル $_GET、$_POST そして $_COOKIE にそれぞれ個別に適用されます)。 このディレクティブを使うと、ハッシュの衝突を悪用したサービス不能攻撃を受ける可能性を軽減できます。 このディレクティブで設定した数を超える入力変数があった場合は E_WARNING が発生し、 それ以降の入力変数はリクエストから削除されます。 多次元配列の場合、この制限は個々の次元ごとにしか適用されません。

PHP: 実行時設定 - Manual
  • デフォルトは 1000 で、レンタルサーバ等でも 1000 のままのところが多い*1
  • PHP ソース内で、ini_set() で設定しようとしても(1000以下でも)false が返る
  • レンタルサーバによっては、php.ini で上限を変更できるところもある*2

*1:なぜか、お名前.com では最初から 90000 個とかでも受けつけた。ただし上限は変動する模様

*2:さくらインターネットのレンタルサーバはphp.iniで設定可能。ただし、これも〜94500くらいが上限か?