Solution à la perte de données PHP : vérifiez d'abord l'intégrité de la demande de soumission du formulaire ; puis vérifiez si les données de la demande dépassent la limite PHP ou nginx ; puis obtenez la demande originale directement via "file_get_contents('php:// ; input')" Données ; dernière quantité max_input_var modifiée.
Problème de perte de données lors de la soumission du formulaire PHP
Aujourd'hui, j'ai rencontré un petit problème lors du traitement de l'importation Excel de l'utilisateur
Les exigences sont les suivantes : après que l'utilisateur a importé Excel, utilisez PHPExcel pour lire les données importées, afficher un formulaire, et l'utilisateur vérifie le formulaire pour confirmer l'intégrité des données importées, et confirme enfin l'entrée dans le base de données.
Cependant, étant donné que l'utilisateur importe beaucoup de données dans Excel, il y a plus de 6 000 entrées après le rendu du formulaire, et la soumission du formulaire (POST) est directement utilisé, ce qui fait que l'arrière-plan ne peut être lu qu'une petite partie des données précédentes.
Suivi
1. Vérifiez l'intégrité de la demande de soumission du formulaire
En suivant la requête http lors de la soumission, il a été constaté que toutes les données étaient soumis normalement.
2. Vérifiez si les données de la requête dépassent la limite php ou nginx.
En regardant la longueur du contenu sous les en-têtes de requête, il s'avère qu'il ne s'agit que de 218 558 B, soit environ 20 Ko. . Cela ne respecte certainement pas la limite.
3. Obtenez les données de la demande d'origine directement via file_get_contents('php://input')
Étant donné que seule une petite partie des données est obtenue directement à l'aide de $_POST, utilisez php:/ / directement. L'entrée obtient les données d'entrée originales lors de l'impression, il s'avère que les données obtenues par ce type d'envoi sont complètes.
4. Analysez les paramètres de la requête d'origine via la fonction parse_str
Lorsque j'analyse les données d'entrée d'origine avec parse_str
... $origin = file_get_contents('php://input'); parse_str($origin, $result); var_dump($result);
J'ai une erreur
Warning: parse_str(): Input variables exceeded 1000. To increase the limit change max_input_vars in php.ini
À ce stade, je devrais comprendre quel est le problème.
5. Modifiez le nombre de max_input_var dans php.ini
# 默认的 php.ini 配置 # How many GET/POST/COOKIE input variables may be accepted # max_input_vars = 10000
La configuration par défaut autorise uniquement le nombre maximum d'entrées pour les requêtes (GET/POST/COOKIE) à 1000.
Après avoir modifié de manière appropriée la valeur de max_input_var dans php.ini, le problème est résolu.
Bien sûr, la solution finale était de soumettre les données au format json via ajax. Après tout, modifier la configuration de php.ini n'est toujours pas idéal !
Fin
Parce que je n'ai pas remarqué que PHP a cette limitation, j'ai renversé ici
Pour plus de connaissances connexes, veuillez visiter le Site Web PHP chinois !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!