(59) POSTできるサイズに制限がある?

投稿者: | 2018年11月30日

22,811 views

この記事は最終更新から 1855日 が経過しています。

1. 問題発生

入力フォームからデータを送信したら、送れていないものが発生した。

現象は以下の通り。
1) POSTしたデータの最後の方が切れている。
2) POSTするデータの位置を相互に変えてみたら、やはり後ろの方が切れている。

現象から判断すると…
どうやらサイズ制限に引っかかっているっぽい。

2. 原因を調査

考えられる可能性を一つずつ確認して行った。

【可能性1】 Apache2.4で POSTサイズ制限をしている?

httpd.conf の設定を見てみる。
LimitRequestBody がいくつに設定されているか?

$ httpd -t -DDUMP_CONFIG | grep -i limit
  AllowOverride FileInfo AuthConfig Limit Indexes
Syntax OK

ない…
ということは、Apache的には制限をかけていない。

【可能性2】 PHPの POSTデータサイズ制限に引っかかった?

phpinfo()で post_max_size を確認してみる。

post_max_size 2048M

2048MBもの巨大なデータは送っていないのでこれも違う…

【可能性3】 PHPで使用可能なメモリサイズ制限に引っかかった?

phpinfo()で memory_limit を確認してみる。

memory_limit 1280M

1GB近いデータなどは送っていないのでこれも違う…

【可能性4】 PHPで POST可能なデータの個数制限に引っかかった?

phpinfo()で max_input_vars を確認してみる。

max_input_vars 1000

これだ!

20 x 20 x 4 = 1600セル の表中にデータを入力して送信している。

よって…
max_input_varsを 1600以上に設定しなければならない。

3. 対策

方法1 : .user.ini に設定する。

phpinfo()で user_ini.filenameuser_ini.cache_ttl を確認してみる。

user_ini.filename .user.ini
user_ini.cache_ttl 300

私が使っているレンタルサーバーの場合、.user.ini を編集してから 300秒後には反映されるようだ。

で…
プログラムを設置しているディレクトリに .user.ini を作成し、この中で以下のように記述する。

max_input_vars=2000

必要なのは 1600だけど、余裕を見て 2000にしておいた。

方法2 : .htaccessに設定する。

.user.iniが使えない場合は .htaccess に書いてもよい。

php_value max_input_vars 2000

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)