PHP データ損失の解決策: まずフォーム送信リクエストの整合性をチェックし、次にリクエスト データが PHP または nginx の制限を超えているかどうかを確認してから、「file_get_contents('php://」を通じて元のリクエストを直接取得します。 input')" データ; 最後に変更された max_input_var 量。
#PHP フォーム送信時のデータ損失の問題
今日、ユーザーの Excel インポートを処理しているときに小さな問題が発生しました 要件は次のとおりです。ユーザーが Excel をインポートした後、PHPExcel を使用してインポートされたデータを読み取り、フォームをレンダリングします。ユーザーはフォームを表示してインポートされたデータの整合性を確認し、最後にフォームへの入力を確認します。データベース。 ただし、ユーザーの Excel は大量のデータをインポートしているため、フォームのレンダリング後に 6,000 を超える入力があり、フォーム送信 (POST) が直接使用されます。結果として、以前のデータのごく一部しか読み取れなくなります。追跡
1. フォーム送信リクエストの整合性を確認します送信中に http リクエストを追跡すると、すべてのデータが不正であることがわかります。普通に提出しました。 2. リクエスト データが php または nginx の制限を超えていないか確認します。リクエスト ヘッダーの Content-Length を見ると、わずか 218558 B (約 20KB) であることがわかります。 。これは間違いなく制限を満たしていません。 3. file_get_contents('php://input') を通じて元のリクエスト データを直接取得します $_POST を直接使用して取得できるのはデータのごく一部だけであるため、php を使用します。 // 直接 input で元の入力データを取得し、印刷してみるとこのような送信で得られたデータが完成していることが分かります。 4. parse_str 関数を使用して元のリクエスト パラメーターを解析するparse_str... $origin = file_get_contents('php://input'); parse_str($origin, $result); var_dump($result);を使用して元の入力データを解析すると、エラーが発生しました
Warning: parse_str(): Input variables exceeded 1000. To increase the limit change max_input_vars in php.iniこの時点で、問題が何であるかを理解する必要があります。 5. php.ini の max_input_var の数を変更します
# 默认的 php.ini 配置 # How many GET/POST/COOKIE input variables may be accepted # max_input_vars = 10000デフォルト設定では、リクエスト (GET/POST/COOKIE) の入力の最大数は 1,000 のみ許可されています。 php.ini の max_input_var の値を適切に変更すると、問題は解決します。 もちろん、最終的な解決策は、ajax を介して json 形式のデータを送信することですが、結局のところ、php.ini の構成を変更することは依然として理想的ではありません。 終了PHP にこの制限があることに気づかなかったので、ここでひっくり返りました関連知識の詳細については、
PHP 中国語 Web サイトをご覧ください。 !
以上がPHPフォームで送信したデータが失われた場合の対処方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。