はじめに
画面にデータを一覧表示をさせた後に送信ボタンを押した際、下記エラーが発生しました。
今回はその原因と対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しているデータは必要なのか?もっと送信データを減らすことが出来るのではないか?
などなどそう言った視点で一度考え直す必要があると思います。(自分に言い聞かす!)
その方がサーバーも圧迫せず応答性の高いシステム開発が実現できると思います。
これを機会に一度送信データを見直していただけると幸いです。
参考サイト