PHPフォーム提出データ紛失問題
今日、ユーザ
ユーザーが
しかし、ユーザ
ついせき
1.フォーム発行要求の整合性の表示
コミット時の
2.要求データが
3.元の要求データを
直接
4.関数
元の入力データを
私は間違いを犯した.
ここまで来たら、問題がどこにあるかわかるはずです.
5.修正
デフォルトの構成では、要求(
もちろん、最後に
の最後の部分
excel
のインポートの処理中に、小さな問題が発生しました.ユーザーが
excel
をインポートした後、PHPExcelでインポートデータを読み込み、1つのフォームをレンダリングし、ユーザーはフォームを表示することで、インポートしたデータの完全性を確認し、最後に入庫を確認する必要があります.しかし、ユーザ
excel
が導入したデータが比較的多いため、フォームレンダリング後に6000
を超えるinput
があり、コミット時(POST
)は直接採用されたフォームコミットであり、バックグラウンドでは前のデータのほんの一部しか読み取れない.ついせき
1.フォーム発行要求の整合性の表示
コミット時の
http
リクエストを追跡すると、すべてのデータが正常にコミットされていることがわかります.2.要求データが
php
またはnginx
の制限を超えているかどうかを確認するRequest Headers
の下の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
)の最大input
数は1000
個のみ許可されます.php.ini
のmax_input_var
の値を適切に修正した後、問題は解決します.もちろん、最後に
ajax
を通じてjson
フォーマットのデータを提出することによって解決されました.結局、php.ini
の構成を修正するのは理想的ではありません.の最後の部分
php
にこの制限があることに気づかなかったため、ここで転覆しました.@freyoの指摘に感謝します.あなたは私たちの大神です.