ホームページ >バックエンド開発 >PHPの問題 >PHPフォームで送信したデータが失われた場合の対処方法

PHPフォームで送信したデータが失われた場合の対処方法

藏色散人
藏色散人オリジナル
2020-07-11 10:52:423246ブラウズ

PHP データ損失の解決策: まずフォーム送信リクエストの整合性をチェックし、次にリクエスト データが PHP または nginx の制限を超えているかどうかを確認してから、「file_get_contents('php://」を通じて元のリクエストを直接取得します。 input')" データ; 最後に変更された max_input_var 量。

PHPフォームで送信したデータが失われた場合の対処方法

#PHP フォーム送信時のデータ損失の問題

今日、ユーザーの Excel インポートを処理しているときに小さな問題が発生しました

要件は次のとおりです。ユーザーが Excel をインポートした後、PHPExcel を使用してインポートされたデータを読み取り、フォームをレンダリングします。ユーザーはフォームを表示してインポートされたデータの整合性を確認し、最後にフォームへの入力を確認します。データベース。

PHPフォームで送信したデータが失われた場合の対処方法

ただし、ユーザーの 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。