Lösung für PHP-Datenverlust: Überprüfen Sie zunächst die Integrität der Formularübermittlungsanforderung, prüfen Sie dann, ob die Anforderungsdaten das PHP- oder Nginx-Limit überschreiten, und rufen Sie dann die ursprüngliche Anforderung direkt über „file_get_contents('php“ ab; input')" Daten; zuletzt geänderte max_input_var-Menge.
Datenverlustproblem bei der Übermittlung von PHP-Formularen
Heute bin ich auf ein kleines Problem bei der Verarbeitung des Benutzer-Excel-Imports gestoßen
Die Anforderungen lauten wie folgt: Nachdem der Benutzer Excel importiert hat, verwendet er PHPExcel, um die importierten Daten zu lesen, ein Formular zu rendern, und der Benutzer überprüft das Formular, um die Integrität der importierten Daten zu bestätigen, und bestätigt schließlich die Eingabe in das Datenbank.
Da der Benutzer jedoch viele Daten in Excel importiert, sind nach dem Rendern des Formulars mehr als 6000 Eingaben erforderlich, und die Formularübermittlung (POST) erfolgt direkt verwendet, wodurch im Hintergrund nur ein kleiner Teil der vorherigen Daten gelesen werden kann.
Verfolgen
1. Überprüfen Sie die Integrität der Formularübermittlungsanforderung
Durch die Verfolgung der HTTP-Anfrage während der Übermittlung wird festgestellt, dass alle Daten vorhanden sind normal eingereicht.
2. Überprüfen Sie, ob die Anforderungsdaten das PHP- oder Nginx-Limit überschreiten.
Beim Betrachten der Inhaltslänge unter Anforderungsheadern wird festgestellt, dass sie nur 218558 B beträgt, was etwa 20 KB entspricht . Das ist definitiv nicht die Grenze.
3. Holen Sie sich die ursprünglichen Anforderungsdaten direkt über file_get_contents('php://input')
Da nur ein kleiner Teil der Daten direkt mit $_POST abgerufen werden kann, verwenden Sie PHP: // direkt. Beim Ausdrucken wird festgestellt, dass die durch diese Art des Sendens erhaltenen Daten vollständig sind.
4. Analysieren Sie die ursprünglichen Anforderungsparameter mit der Funktion parse_str
Wenn ich die ursprünglichen Eingabedaten mit parse_str analysiere
... $origin = file_get_contents('php://input'); parse_str($origin, $result); var_dump($result);
Ich habe eine Fehlermeldung erhalten
Warning: parse_str(): Input variables exceeded 1000. To increase the limit change max_input_vars in php.ini
An diesem Punkt sollte ich verstehen, wo das Problem liegt.
5. Ändern Sie die Anzahl der max_input_var in php.ini
# 默认的 php.ini 配置 # How many GET/POST/COOKIE input variables may be accepted # max_input_vars = 10000
Die Standardkonfiguration erlaubt nur eine maximale Anzahl von Eingaben für Anfragen (GET/POST/COOKIE).
Nachdem der Wert von max_input_var in php.ini entsprechend geändert wurde, ist das Problem gelöst.
Natürlich bestand die endgültige Lösung darin, Daten im JSON-Format über Ajax zu übermitteln. Schließlich ist das Ändern der Konfiguration von php.ini immer noch nicht ideal!
Ende
Da mir nicht aufgefallen ist, dass PHP diese Einschränkung hat, habe ich hier umgedreht
Weitere Informationen zu diesem Thema finden Sie auf der PHP-Website für Chinesisch !
Das obige ist der detaillierte Inhalt vonWas tun, wenn die vom PHP-Formular übermittelten Daten verloren gehen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!