ホームページ >バックエンド開発 >PHPチュートリアル >PHP のラージフォームは post メソッドを使用してデータを送信する パケット損失の問題
運用環境では、巨大なフォームに 3 つの画像、数百の入力ボックス、およびほぼ 1000 のチェックボックスが含まれており、post メソッドを使用してバックグラウンドに送信されると、データが切り取られます。
実稼働環境では、巨大なフォームに 3 つの画像、数百の入力ボックス、およびほぼ 1000 のチェックボックスが含まれており、post メソッドを使用してバックグラウンドに送信されると、データが切り捨てられます。 一通りデバッグしてみると、PHPが$_POSTを取得した時点でデータが不足していることが分かりました。 最初はPHPのpost_max_sizeとupload_max_sizeの問題かと思ったのですが、100Mに設定してもダメでした。 後から思ったのですが、Apacheのlimitpostdateの問題で、あまり高く設定してもダメでした。 その後、パケットをキャプチャするためにクライアントに WireShark をインストールしたところ、TCP パケットの途中で TCP WINDOWS FULL が表示されたことがわかりました。そのため、ブラウザが 2 回目の TCP ハンドシェイク中に合計パッケージ サイズを正しく送信しなかったためだと考えました。 最後まで、Apache の error.log に次のエラーが見つかりました。 PHP 警告: 不明: 入力変数が 1000 を超えました PHP の投稿のデフォルトのパラメータ数は 1000 で、超過分は自動的に破棄されることがわかりました。 この値を調整します。たとえば、2000 に設定します。 PHP.iniで設定 max_input_vars = 2000 |