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.filename と user_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