LoginSignup
0
0

More than 1 year has passed since last update.

大量データをpost送信したらエラーが発生した話

Last updated at Posted at 2022-06-06

はじめに

画面にデータを一覧表示をさせた後に送信ボタンを押した際、下記エラーが発生しました。
今回はその原因と対php.iniの設定変更についてまとめました。

エラー内容

下記のエラーが画面に表示されました。
簡単に言うと、php.iniのmax_input_varsで設定された件数よりデータが多いのでエラーでっせということです。

Warning: Unknown: Input variables exceeded 1000. To increase the limit change max_input_vars in php.ini. in Unknown on line 0

Fatal error: Uncaught ErrorException: Cannot modify header information - headers already sent by (output started at 以下発生箇所のパス...)
Fatal error: Uncaught ErrorException: Cannot modify header information - headers already sent by (output started at 以下発生箇所のパス...)

エラーが発生した原因

リスト表示をさせた際、各リスト情報をforeachにてhidden属性で情報を持たせていました。
この状態でsubmitボタンを押したとき、hidden属性で持たせていた情報が大量にpost送信されました。
大量のpost送信によって、php.iniの設定値(max_input_vars)よりも多いデータを送ったため、エラーが発生しました。
なので、大量のinputタグやhidden属性等を設定している画面でpost送信する際は気を付ける必要があります。

そもそもmax_input_varsて何?

max_input_varsとはPHP5.3.9以降のバージョンで設けられたもので、1度にPOSTできる数を制限する設定です。
この制限は、php.iniの「max_input_vars」の設定値を変更することで対応できます。また、初期設定は1000となっています。
ちなみに、max_input_varsの設定が存在する理由は、セキュリティの観点から大量のデータをphp側で受け取れないようにするためのようです。

加えて、post送信だけでなくget送信、sessionもmax_input_varsによるデータ送信制限の対象のようです。
(以下php公式参照)
https://www.php.net/manual/ja/info.configuration.php#ini.max-input-vars

max_input_varsの設定変更方法

下記に従って、php.iniの設定を変更すればOKです。

1, 変更項目は、max_input_varsの値を変更する。
2, 変更する際は先頭についている ; (コメントアウト)を外す。
3, 変更後は、XAMMP or MANPを一度stopにして起動し直す。

最後に

ここで紹介したphp.iniの上限値を変えることでエラーに対処することが出来ますが
本当にpostしているデータは必要なのか?もっと送信データを減らすことが出来るのではないか?
などなどそう言った視点で一度考え直す必要があると思います。(自分に言い聞かす!)
その方がサーバーも圧迫せず応答性の高いシステム開発が実現できると思います。
これを機会に一度送信データを見直していただけると幸いです。

参考サイト

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0